2019년 2월 11일 월요일

[하루에 한 R] 리스트 생기초

data = c("a", "b", "c", "d", "e")라는 벡터가 있다고 가정하자. list(data)와 list("a", "b", "c", "d", "e")는 전혀 다른 구조의 리스트를 만들어 낸다.


data = c("a", "b", "c", "d", "e")
d1 = list(data)
d2 = as.list(data)
d3 = list("a", "b", "c", "d", "e")

as.list() 함수를 쓰지 않으면 인수로 주어진 벡터를 하나의 원소로 갖는 리스트를 만든다. 벡터의 개별 항목이 리스트의 원소가 되게 만들려면 as.list() 함수를 쓰거나, 혹은 list() 함수의 인수를 개별적으로 전부 나열해야 한다.

d2와 d3 리스트는 같은 동일한 구조이다.
d2(=d3) 리스트의 원소에는 아직 이름이 지어지지 않았다. 이름 정보를 수록한 벡터를 nato = c("Alpha","Bravo","Charlie","Delta","Echo")라 하면 names() 함수를 사용하여 이를 리스트의 각 원소에 부여하면 된다.


리스트를 생성하는 단계에서 이름을 부여할 수도 있다. setNames() 함수가 이러한 때에 쓰인다. 첫번째 인자가 벡터가 아니라 리스트임을 명시적으로 보여야 한다.


만약 실수로 as.list() 함수를 쓰지 않았다면 어떻게 될까? 그러면 단순한 named vector가 된다.


edit() 함수를 이용하여 실제로 이들 데이터 구조가 어떻게 선언되는지를 알아보자. 


만약 리스트의 원소 중에 벡터가 포함되어 있다면 모양이 좀 더 복잡할 것이다.


댓글 없음: