우리는 R 객체에 값(데이터)을 할당한다. 객체의 입장에서 그 본질적인 값 이외에 추가로 부가 정보를 얻을 수 있다. 이것을 '속성
' 이라고 한다. 이런 속성에 해당하는 것이 앞에서 본 이름(names),디멘션(dim),클래스(class) 등이다. 이런 특수한 속성 이외에도 사용자가 정의한 속성도 사용할 수 있다.
어떤 R 객체가 가진 '모든' 속성 값들을 한꺼번에 알아볼 때는 attributes() 라는 함수를 사용한다.
> attributes(ddf)
$names
[1] "id" "pt_name" "categogo" "KT_Score"
$row.names
[1] 1 2 3 4 5 6 7 8 9 10
$class
[1] "data.frame"
출력 결과를 보면 이 함수는 R리스트를 출력하고 있음을 알 수 있다. 속성들은 종류가 여러 가지이기 때문에 이처럼 다양한 것을 한꺼번에 처리할 수 있는 R 객체를 리스트로 출력하는 것은 어찌 보면 당연하다.
출력만 하는 대신 이것을 R 객체로 저장해보자.
> attr_list <- attributes(ddf) //attr_list에 ddf의 attributes 값을 대입
> attr_list$names
[1] "id" "pt_name" "categogo" "KT_Score"
> attr_list$row.names
[1] 1 2 3 4 5 6 7 8 9 10
> attr_list$class
[1] "data.frame"
> attr(ddf,"names") // attr(조사 대상이 되는 객체, 파악하고자 하는 속성의 이름)
[1] "id" "pt_name" "categogo" "KT_Score"
> attr(ddf,"row.names")
[1] 1 2 3 4 5 6 7 8 9 10
> attr(ddf,"class")
[1] "data.frame"
attr_list는 R 리스트이기 때문에 앞에서 설명한 방법대로 각각에 대해 접근할 수 있다. 여기서는 간단한 $를 사용했다.
또는 attr() 이라는 함수를 사용하여 '개별 속성'에 접근할 수 있다. 첫 번째 인자는 조사 대상이 되는 객체를, 두 번째 인자는 파악하고자 하는 속성의 이름을 준다.
attr() 함수를 대체형으로 사용하여 속성을 임의로 지정할 수 있다. ddf라는 데이터 프레임에 example 이라는 속성을 만들고, 여기에 "my Data Set"이라고 줘보자.
> attr(ddf, "example") <- "my Data Set" //ddf 데이터 프레임에 example이라는 속성 만들고 "My data set"이라고 줌.
> attributes(ddf)
$names
[1] "id" "pt_name" "categogo" "KT_Score"
$row.names
[1] 1 2 3 4 5 6 7 8 9 10
$class
[1] "data.frame"
$example
[1] "my Data Set"
> attr(ddf,"example")
[1] "my Data Set"
그리고 객체 자체를 출력해보자. 데이터 자체는 바뀐것이 없을 것이다.
> ddf
id pt_name categogo KT_Score
1 1 a Treat 35
2 2 b Control 45
3 3 c Treat 56
4 4 d Control 38
5 5 e Treat 45
6 6 f Control 37
7 7 g Treat 23
8 8 h Control 22
9 9 i Treat 30
10 10 j Control 41
그런데 str() 함수로 구조를 보면 이 내용을 더 확인 할 수 있다.
> str(ddf)
'data.frame': 10 obs. of 4 variables:
$ id : chr "1" "2" "3" "4" ...
$ pt_name : Factor w/ 10 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10
$ categogo: Factor w/ 2 levels "Control","Treat": 2 1 2 1 2 1 2 1 2 1
$ KT_Score: num 35 45 56 38 45 37 23 22 30 41
- attr(*, "example")= chr "my Data Set"
R에서 특별하게 취급되는 속성에는 이름(names), 행이름(row.names), 디멘션(dim), 디멘션이름(행과 열의 이름, dimnames),
시계열 데이터에서 쓰는 tsp, 객체의 클래스를 의미하는 class 등이 있다.
여기서 클래스(class)는 R에서 제네릭 함수를 이해하는 데 중요한 속성이다. R의 제네릭 함수들은 인자로 주어진 R 객체의 속성인 '클래스를 읽고' 읽은 속성에 따라 함수를 배분한다. 우리가 데이터 프레임을 인쇄했을 때 그렇게 보이는 이유는 print.data.frame 이라는 함수에 그렇게 정의되어 있기 때문이다. 코드는 print(ddf)라고 하지만, ddf의 클래스에 따라서 거기에 맞게 정의된 함수를 선택한다는 개념이다. 그러므로 이 클래스 속성을 파악하는 class() 함수도 꼭 기억할 필요가 있다.
> class(ddf)
[1] "data.frame"
'전공 > R프로그래밍' 카테고리의 다른 글
R 프로그래밍 12. R에 내장된 데이터셋 (0) | 2019.07.04 |
---|---|
R프로그래밍 11.팩터(factor) : 카테고리형 데이터를 표현 , 행렬과 배열 (0) | 2019.07.03 |
R프로그래밍 9. 데이터 프레임 (0) | 2019.07.01 |
R프로그래밍 8. 리스트 (0) | 2019.06.28 |
R프로그래밍 7. 규칙성을 가진 벡터 만들기 (0) | 2019.06.26 |