R 에서 메타데이터, attr 참조하는 법

R 에서 메타데이터, attr 참조하는 법

How to Refer attr in R

개요

R 에서 함수들을 사용하다보면 간혹 attr(,"something")과 같은 데이터를 접할 때가 있다. Attribute는 말 그대로 속성 을 의미하는데, 파이썬과 같은 언어와 달리 R 에서는 메타 데이터로써 데이터에 들어있는 일종의 주석으로 받아들여도 좋다. 그런데 R 을 쓰다보면 가끔 이 데이터를 참조하고 싶을 때가 있다.

예시

20190605\_203648.png 예를 들어 표준화를 하고 나면 평균이 attr(,"scaled:center")로, 표준편차가 attr(,"scaled:scale")로 남아있다. 물론 굳이 이걸 참조해서 평균과 표준편차를 구할 필요는 없지만, 그렇게 구하고 싶다면 그렇게 구할 수 있어야할 것이다.

20190605\_203706.png 메타 데이터를 참조하는 방법은 attributes() 함수를 사용하는 것이다. attributes()는 데이터의 차원을 비롯한 메타데이터 전체를 반환해준다. 이렇게 반환되고 나면 $ 을 이용해서 간단히 참조할 수 있다.

20190605\_204020.png 그러나 전체적으로 확인하는 게 아니라 정확히 딱 하나의 메타 데이터만 보는 것으로 충분하다면 위와 같이 attr() 함수를 사용해 바로 원하는 메타 데이터를 반환하는 것도 가능하다.

한편 attr()는 역으로 메타데이터를 넣는데에도 쓰일 수 있다. 다음과 같이 등차수열이 있을 때, attr() 함수로 수열의 속성이 무엇인지, 초항이 무엇인지, 공차가 무엇인지 데이터 그 자체에 넣어둘 수 있는 것이다.

20190605\_204039.png 어디까지나 메타데이터인만큼, sum()과 같은 기존의 함수를 그대로 써도 없던 셈 치고 생각하던대로 잘 작동하는 것을 확인할 수 있다. 복잡한 프로그래밍을 한다면 적극적으로 사용해봄직하다.

코드

set.seed(150421)
x<-rnorm(10)
z<-scale(x); z
 
attributes(z)
attributes(z)$'scaled:center'
attributes(z)$'scaled:scale\'
 
attr(z,"scaled:center")
attr(z,"scaled:scale")
 
temp <- 2*1:10-1
attr(temp, "type") <- "arithmetic"
attr(temp, "initial") <- 1
attr(temp, "common difference") <- 2
temp
sum(temp)
댓글