R语言 列表 Lists

示例

列表可以是[:

l1 <- list(c(1, 2, 3), 'two' = c("a", "b", "c"), list(10, 20))
l1
## [[1]]
## [1] 1 2 3
## 
## $two
## [1] "a" "b" "c"
##
## [[3]]
## [[3]][[1]]
## [1] 10
##
## [[3]][[2]]
## [1] 20

l1[1]
## [[1]]
## [1] 1 2 3

l1['two']
## $two
## [1] "a" "b" "c"

l1[[2]]
## [1] "a" "b" "c"

l1[['two']]
## [1] "a" "b" "c"

请注意,结果l1[2]仍然是列表,因为[运算符会选择列表中的元素,并返回较小的列表。的[[操作者提取列表中的元素,返回列表元素的类型的对象。

元素可以按数字或名称的字符串(如果存在)进行索引。[通过传递数字矢量或名称字符串可以选择多个元素。用的矢量索引length > 1中[和[[返回一个“清单”与指定的元素和一个递归子集(如果可用),分别

l1[c(3, 1)]
## [[1]]
## [[1]][[1]]
## [1] 10
## 
## [[1]][[2]]
## [1] 20
## 
## 
## [[2]]
## [1] 1 2 3

相比:

l1[[c(3, 1)]]
## [1] 10

等效于:

l1[[3]][[1]]
## [1] 10

该$运算符允许您仅按名称选择列表元素,但与[和不同[[,不需要引号。作为中缀运算符,$只能使用一个名称:

l1$two
## [1] "a" "b" "c"

另外,$默认情况下,运算符允许部分匹配:

l1$t
## [1] "a" "b" "c"

与[[需要指定是否允许部分匹配的地方形成对比:

l1[["t"]]
## NULL
l1[["t", exact = FALSE]]
## [1] "a" "b" "c"

设置options(warnPartialMatchDollar = TRUE),当与发生部分匹配时会给出“警告” $:

l1$t
## [1] "a" "b" "c"
## Warning message:
## In l1$t : partial match of 't' to 'two'