R 列表 List
R语言 列表类型详解 · 难度:入门 · +10XP
R语言 列表类型详解
列表(List)是R语言中最灵活的数据结构,它可以包含不同类型的元素——数字、字符串、向量、矩阵、数据框甚至嵌套列表都可以放在同一个列表中。列表是R语言中存储复杂数据和函数返回多个结果的基石。
创建列表
# 使用 list() 函数创建
l <- list(
name = "小明",
age = 25,
scores = c(85, 92, 78),
is_active = TRUE,
address = list(city = "南宁", district = "青秀区")
)
# 查看列表结构
str(l)
# 输出:
# List of 5
# $ name : chr "小明"
# $ age : num 25
# $ scores : num [1:3] 85 92 78
# $ is_active: logi TRUE
# $ address :List of 2
# ..$ city : chr "南宁"
# ..$ district: chr "青秀区"
访问列表元素
| 方式 | 语法 | 返回类型 | 说明 |
|---|---|---|---|
$ 美元符号 | l$name | 元素本身 | 最常用,需知道名称 |
[[]] 双方括号 | l[["name"]] | 元素本身 | 可用名称或数字索引 |
[] 单方括号 | l["name"] | 子列表(仍为list) | 保留列表结构 |
l <- list(name = "小明", scores = c(85, 92, 78))
l$name # "小明" — 字符串
l[["scores"]] # c(85, 92, 78) — 向量
l["scores"] # list(scores=c(85,92,78)) — 仍是列表
l[[3]] # 按数字索引访问第三个元素
l[[2]][2] # 92 — 先取scores向量,再取第二个值
# 区别总结:$ 和 [[]] 拿元素本身,[] 拿子列表
列表的修改与添加
l <- list(name = "小红", age = 20)
# 修改元素
l$age <- 21 # 修改年龄
l[["name"]] <- "小芳" # 修改名字
# 添加新元素
l$city <- "南宁" # 直接赋值新名称
l[["score"]] <- 95 # 新元素
# 删除元素
l$age <- NULL # 设为NULL即删除
# 合并列表
l2 <- list(gender = "女", hobby = "编程")
l3 <- c(l, l2) # c() 合并两个列表
列表的遍历
l <- list(name = "张三", age = 25, city = "南宁")
# 使用 for 循环遍历
for (i in seq_along(l)) {
cat(names(l)[i], ":", l[[i]], "
")
}
# 使用 lapply 对每个元素应用函数
lapply(l, class) # 返回每个元素的数据类型
# $name: [1] "character"
# $age: [1] "numeric"
# $city: [1] "character"
# sapply 简化结果(尽量转为向量或矩阵)
sapply(l, class)
# name age city
# "character" "numeric" "character"
实战练习
- 创建一个包含姓名、年龄、成绩向量、联系方式的列表
- 用 $、[[]] 和 [] 三种方式分别访问列表元素并观察返回类型
- 用 sapply 一次性查看列表中所有元素的数据类型
- 创建嵌套列表(如学生列表包含多门课程成绩),访问嵌套层的数据