R 에서 리스트를 참조하는 여러가지 방법

R 에서 리스트를 참조하는 여러가지 방법

Some way to refer list in r

개요

R 은 데이터를 다루기 위해 정말 좋은 기능들을 많이 제공하는데, 그 중에서도 리스트는 R 을 사용하게 만드는 가장 큰 이유 중 하나다. 파이썬을 위시한 다른 언어에도 리스트 자료형 자체는 많이 구현되어 있으나 R 만큼 데이터를 다루기 편하고 직관적으로 구현되어 있지는 않다. 리스트를 잘 다룰 수 있게 되면 다른 프로그래밍 언어로는 다소 복잡하고 귀찮은 코딩도 아주 쉽게 할 수 있다.

예시

20190604\_161445.png

위와 같이 세가지 시퀀스가 하나의 리스트에 속한 상황을 생각해보자. 기본적으로 데이터를 뜯어봤을 때 $이 있으면 데이터$이름과 같이 참조하는 건 맞다. 하지만 이름이 너무 길어서 다 입력하기 귀찮은 경우, 혹은 코드가 복잡해지거나 반복 작업이 필요한 경우 이걸 일일이 쓰고 있을 수는 없다.

20190604\_161526.png 다행스럽게도 리스트는 데이터의 이름이 정해지더라도 여전히 그 순서대로 번호가 할당된다. 따라서 위와 같이 그냥 숫자로 참조해도 된다.

20190604\_161541.png 숫자로 참조가 된다는 것은 곧 변수로도 참조가 된다는 것이다. 위와 같이 반복문을 작성해도 잘 돌아가는 것을 확인할 수 있다.

한편 반복문은 반복문인데 숫자가 아니라 변수 이름으로 다루는 게 편할 때도 있다. 예를 들어 기상데이터를 종류가 40가지인 리스트로 만들었는데, 그 중에서 “온도"와 “습도"만 제외하는 경우를 들 수 있다. 이럴땐 문자열의 인덱스를 만들어서 처리하는 기교를 많이 사용한다. 다행스럽게도 리스트는 데이터$이름데이터$"이름" 둘 다를 똑같이 받아들이므로 이를 통해 유연한 코드 작성이 가능해진다. 사실, 그 뿐만 아니라 데이터[[이름]] 역시 가능하다. $ 기호는 리스트가 아니라도 데이터 프레임 등에서 쓰일 수 있으니 복잡한 데이터를 다룬다면 헷갈리지 않도록 리스트에만 사용하는 기호인 [[]]만을 사용하는 것을 권장한다.

20190604\_161733.png

코드

sequence<-list(arithmetic=1:10,
               geometric=2^(1:10),
               alternative=1:10*rep(c(1,-1),5))
sequence
 
sequence$geometric
seqence[[2]]
 
for(i in 1:3){
  print(sum(sequence[[i]]))
}
 
sequence$"arithmetic"
for(i in c("arithmetic","alternative")){
  print(sequence[[i]])
}
댓글