通常,您作为用户与之交互的大多数对象都是矢量。e.g数值向量,逻辑向量。这些对象只能接受单一类型的变量(数字向量内部只能有数字)。
一个列表将能够在其中存储任何类型的变量,使其成为可以存储我们需要的任何类型的变量的通用对象。
初始化列表的示例
exampleList1 <- list('a', 'b') exampleList2 <- list(1, 2) exampleList3 <- list('a', 1, 2)
为了了解列表中定义的数据,我们可以使用str函数。
str(exampleList1) str(exampleList2) str(exampleList3)
列表的子集区分提取列表的一部分,即获取包含原始列表中元素子集的列表,以及提取单个元素。使用[通常用于向量的运算符会产生一个新列表。
# Returns List exampleList3[1] exampleList3[1:2]
要获取单个元素,请[[改用。
# Returns Character exampleList3[[1]]
列表条目可以命名为:
exampleList4 <- list( num = 1:3, numeric = 0.5, char = c('a', 'b') )
可以通过名称而不是索引来访问命名列表中的条目。
exampleList4[['char']]
或者,$可以使用运算符访问命名元素。
exampleList4$num
这样做的好处是打字速度更快,可能更容易阅读,但要注意潜在的陷阱,这一点很重要。的$操作者使用局部匹配以识别匹配列表元素,并且可产生意想不到的结果。
exampleList5 <- exampleList4[2:3] exampleList4$num # c(1, 2, 3) exampleList5$num # 0.5 exampleList5[['num']] # NULL
列表可能特别有用,因为它们可以存储不同长度和各种类的对象。
## Numeric vector exampleVector1 <- c(12, 13, 14) ## Character vector exampleVector2 <- c("a", "b", "c", "d", "e", "f") ## Matrix exampleMatrix1 <- matrix(rnorm(4), ncol = 2, nrow = 2) ## List exampleList3 <- list('a', 1, 2) exampleList6 <- list( num = exampleVector1, char = exampleVector2, mat = exampleMatrix1, list = exampleList3 ) exampleList6 #$num #[1] 12 13 14 # #$char #[1] "a" "b" "c" "d" "e" "f" # #$mat # [,1] [,2] #[1,] 0.5013050 -1.88801542 #[2,] 0.4295266 0.09751379 # #$list #$list[[1]] #[1] "a" # #$list[[2]] #[1] 1 # #$list[[3]] #[1] 2