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'