1.7 리스트(Lists)

리스트는 객체의 묶음이다. 단일 리스트는 모든 종류의 요소들(문자 벡터, 숫자 벡터, 행렬, 다른 리스트 등)을 포함할 수 있다. 리스트의 요소들은 보다 쉬은 접근을 위해 이름이 종종 부여된다.

l1 <- list(boo=v1, foo=v2, moo=v3, zoo="Animals!")  # 요소별 이름을 갖는 리스트
l1
## $boo
##  [1]  1  2  3  4  5  6  7  8  9 10 NA NA NA NA NA
## 
## $foo
## [1] 1 1 1 1 1
## 
## $moo
## [1]  TRUE  TRUE FALSE
## 
## $zoo
## [1] "Animals!"
l2 <- list(v1, v2, v3, "Animals!")                  # 요소별 이름이 갖지 않는 리스트
l2
## [[1]]
##  [1]  1  2  3  4  5  6  7  8  9 10 NA NA NA NA NA
## 
## [[2]]
## [1] 1 1 1 1 1
## 
## [[3]]
## [1]  TRUE  TRUE FALSE
## 
## [[4]]
## [1] "Animals!"

빈(empty) 리스트 생성 : list() 함수 또는 NULL 사용

l3 <- list()
l4 <- NULL

리스트 요소 접근 :

l1["boo"]       # 한 개의 대괄호로 "boo" 요소에 접근: 그 결과는 리스트
## $boo
##  [1]  1  2  3  4  5  6  7  8  9 10 NA NA NA NA NA
l1[["boo"]]     # 이중 대괄호로 "boo" 요소에 접근 : 그 결과는 숫자 벡터 v1
##  [1]  1  2  3  4  5  6  7  8  9 10 NA NA NA NA NA
l1[[1]]         # 리스트의 첫 요소를 반환, 위와 동일 : 결과는 숫자 벡터 v1
##  [1]  1  2  3  4  5  6  7  8  9 10 NA NA NA NA NA
l1$boo          # 이중 대괄호와 마찬가지로, $ 연산자로 "boo" 요소에 접근
##  [1]  1  2  3  4  5  6  7  8  9 10 NA NA NA NA NA

리스트에 요소 추가 :

l3[[1]] <- 11          # 빈 리스트 l3의 첫 번째 요소로 11을 추가
l3
## [[1]]
## [1] 11
l4[[3]] <- c(22, 23)   # 빈 리스트 l4의 3번째 요소로 벡터 추가
l4
## [[1]]
## NULL
## 
## [[2]]
## NULL
## 
## [[3]]
## [1] 22 23

리스트 l4에 3번 째 요소를 추가했기 때문에, 첫 번째와 두 번째 요소가 생성되지만 그 값은 비어 있는 NULL이다.

l1[[5]] <- "More elements!" # 네 개의 요소를 갖는 리스트 l1에, 5번째 요소를 추가
l1
## $boo
##  [1]  1  2  3  4  5  6  7  8  9 10 NA NA NA NA NA
## 
## $foo
## [1] 1 1 1 1 1
## 
## $moo
## [1]  TRUE  TRUE FALSE
## 
## $zoo
## [1] "Animals!"
## 
## [[5]]
## [1] "More elements!"
l1[[8]] <- 1:11             # 리스트 l1의 8번쨰 요소에 1:11 벡터 추가
l1
## $boo
##  [1]  1  2  3  4  5  6  7  8  9 10 NA NA NA NA NA
## 
## $foo
## [1] 1 1 1 1 1
## 
## $moo
## [1]  TRUE  TRUE FALSE
## 
## $zoo
## [1] "Animals!"
## 
## [[5]]
## [1] "More elements!"
## 
## [[6]]
## NULL
## 
## [[7]]
## NULL
## 
## [[8]]
##  [1]  1  2  3  4  5  6  7  8  9 10 11

리스트 l1에 8번째 요소를 추가했지만, 6번째와 7번째는 그러지 않았다. 따라서 6번째와 7번째 요소는 비어있다(NULL).

l1$Something <- "A thing"   # "Something"이라는 이름의 요소로 "A thing" 값을 추가
l1
## $boo
##  [1]  1  2  3  4  5  6  7  8  9 10 NA NA NA NA NA
## 
## $foo
## [1] 1 1 1 1 1
## 
## $moo
## [1]  TRUE  TRUE FALSE
## 
## $zoo
## [1] "Animals!"
## 
## [[5]]
## [1] "More elements!"
## 
## [[6]]
## NULL
## 
## [[7]]
## NULL
## 
## [[8]]
##  [1]  1  2  3  4  5  6  7  8  9 10 11
## 
## $Something
## [1] "A thing"