列表是 R 语言的对象集合,可以用来保存不同类型的数据,可以是数字、字符串、向量、另一个列表等,当然还可以包含矩阵和函数。
R 语言创建列表使用 list() 函数。
如下实例,我们创建一个列表,包含了字符串、向量和数字:
实例
list_data <- list("runoops", "google", c(11,22,33), 123, 51.23, 119.1)
print(list_data)
执行以上代码输出结果为:
[[1]] [1] "runoops" [[2]] [1] "google" [[3]] [1] 11 22 33 [[4]] [1] 123 [[5]] [1] 51.23 [[6]] [1] 119.1
我们可以使用 names() 函数给列表的元素命名:
实例
# 列表包含向量、矩阵、列表
list_data <- list(c("Google","Runoops","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),
list("runoops",12.3))
# 给列表元素设置名字
names(list_data) <- c("Sites", "Numbers", "Lists")
# 显示列表
print(list_data)
执行以上代码输出结果为:
$Sites [1] "Google" "Runoops" "Taobao" $Numbers [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 $Lists $Lists[[1]] [1] "runoops" $Lists[[2]] [1] 12.3
访问列表
列表中的元素可以使用索引来访问,如果使用来 names() 函数命名后,我们还可以使用对应名字来访问:
实例
# 列表包含向量、矩阵、列表
list_data <- list(c("Google","Runoops","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),
list("runoops",12.3))
# 给列表元素设置名字
names(list_data) <- c("Sites", "Numbers", "Lists")
# 显示列表
print(list_data[1])
# 访问列表的第三个元素
print(list_data[3])
# 访问第一个向量元素
print(list_data$Numbers)
执行以上代码输出结果为:
$Sites [1] "Google" "Runoops" "Taobao" $Lists $Lists[[1]] [1] "runoops" $Lists[[2]] [1] 12.3 [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6
操作列表元素
我们可以对列表进行添加、删除、更新的操作,如下实例:
实例
# 列表包含向量、矩阵、列表
list_data <- list(c("Google","Runoops","Taobao"), matrix(c(1,2,3,4,5,6), nrow = 2),
list("runoops",12.3))
# 给列表元素设置名字
names(list_data) <- c("Sites", "Numbers", "Lists")
# 添加元素
list_data[4] <- "新元素"
print(list_data[4])
# 删除元素
list_data[4] <- NULL
# 删除后输出为 NULL
print(list_data[4])
# 更新元素
list_data[3] <- "我替换来第三个元素"
print(list_data[3])
执行以上代码输出结果为:
[[1]] [1] "新元素" $<NA> NULL $Lists [1] "我替换来第三个元素"
合并列表
我们可以使用 c() 函数将多个列表合并为一个列表:
实例
# 创建两个列表
list1 <- list(1,2,3)
list2 <- list("Google","Runoops","Taobao")
# 合并列表
merged.list <- c(list1,list2)
# 显示合并后的列表
print(merged.list)
执行以上代码输出结果为:
[[1]] [1] 1 [[2]] [1] 2 [[3]] [1] 3 [[4]] [1] "Google" [[5]] [1] "Runoops" [[6]] [1] "Taobao"
列表转换为向量
要将列表转换为向量可以使用 unlist() 函数,将列表转换为向量,可以方便我们进行算术运算:
实例
# 创建列表
list1 <- list(1:5)
print(list1)
list2 <-list(10:14)
print(list2)
# 转换为向量
v1 <- unlist(list1)
v2 <- unlist(list2)
print(v1)
print(v2)
# 两个向量相加
result <- v1+v2
print(result)
执行以上代码输出结果为:
[[1]] [1] 1 2 3 4 5 [[1]] [1] 10 11 12 13 14 [1] 1 2 3 4 5 [1] 10 11 12 13 14 [1] 11 13 15 17 19
分享笔记