第8章 列表

列表(list)是R语言的对象集合,可以用来保存不同类型的数据,使用list()函数创建。与c()函数[小节3]不同,list()函数保留输入数据最初的数据结构,而c()函数将所有输入数据降维放入一个向量中。使用unlist()函数可以将列表转变为向量。

test_list <- list(c("a","b","c"), 23, matrix(c(1,2,3,4),nrow=2)) 
length(test_list) 
## [1] 3
test_vector <- c(c("a","b","c"), 23, matrix(c(1,2,3,4),nrow=2)) 
length(test_vector)
## [1] 8
length(unlist(test_list)) # 使用`unlist()`函数将列表转变为向量
## [1] 8

在获取列表元素时,如果采用[]+索引值的方式,返回的结果为包含该元素的列表。如果需要将列表元素提取为向量,则需采用[[]]+索引值的方式。如果列表的元素有名称,可以采用$[[]]+名称的方式调用。

向列表添加元素可以使用append()函数。

注意:如果需要将整个向量添加进原有列表中,必须先将向量转为列表形式,否则R会将向量中的元素逐个添加为列表的元素。

# 使用[[]]获取列表中的元素
test_list[[1]] 
## [1] "a" "b" "c"
# 如果列表的元素有名称,可以采用`$`调用
# 给列表的元素命名
names(test_list) <- c("vec", "n", "mtx") 

# 使用"$+名称"调用列表元素
test_list$vec 
## [1] "a" "b" "c"
# 使用"[[名称]]"调用列表元素
test_list[["vec"]] 
## [1] "a" "b" "c"
# 整个添加向量
append(test_list, list(c(FALSE, FALSE, TRUE))) 
## $vec
## [1] "a" "b" "c"
## 
## $n
## [1] 23
## 
## $mtx
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## [[4]]
## [1] FALSE FALSE  TRUE
# 逐个添加向量元素
append(test_list, c(FALSE, FALSE, TRUE)) 
## $vec
## [1] "a" "b" "c"
## 
## $n
## [1] 23
## 
## $mtx
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## [[4]]
## [1] FALSE
## 
## [[5]]
## [1] FALSE
## 
## [[6]]
## [1] TRUE