列表快速入门
通常,你作为用户与之交互的大多数对象往往是一个向量; 例如数字向量,逻辑向量。这些对象只能采用单一类型的变量(数字向量只能在其中包含数字)。
列表可以在其中存储任何类型变量,使其成为可以存储我们需要的任何类型变量的通用对象。
初始化列表的示例
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