8-R列表

列表是 R 语言的对象集合,可以用来保存不同类型的数据,可以是数字、字符串、向量、另一个列表、矩阵、数据框等,当然还可以包含矩阵和函数。

列表是一种灵活的数据结构,可以存储和操作多种类型的数据对象。

1.创建列表

R 语言创建列表使用 list() 函数。

如下实例,我们创建一个列表,包含了字符串、向量和数字:

实例:

R 复制代码
list_data <- list("hello", "world", c(11,22,33), 123, 51.23, 119.1)
print(list_data)

执行以上代码输出结果为:

复制代码
[[1]]
[1] "hello"

[[2]]
[1] "world"

[[3]]
[1] 11 22 33

[[4]]
[1] 123

[[5]]
[1] 51.23

[[6]]
[1] 119.1

我们也可以使用 c() 函数来创建列表,也可以使用该函数将多个对象合并为一个列表,例如:

复制代码
my_list <- c(object1, object2, object3)

实例:

R 复制代码
# 创建包含数字的向量
numbers <- c(1, 2, 3, 4, 5)
# 创建包含字符的向量
characters <- c("apple", "banana", "orange")
# 合并两个数字向量
merged_vector <- c(numbers, c(6, 7, 8))
# 合并两个字符向量
merged_characters <- c(characters, c("grape", "melon"))

我们可以使用 names() 函数给列表的元素命名:

实例:

R 复制代码
# 列表包含向量、矩阵、列表
list_data <- list(c("zhangsan","lisi","wangwu"), matrix(c(1,2,3,4,5,6), nrow = 2),
   list("score",12.3))

# 给列表元素设置名字
names(list_data) <- c("name", "Numbers", "Lists")

# 显示列表
print(list_data)

执行以上代码输出结果为:

复制代码
$name
[1] "zhangsan" "lisi"     "wangwu"  

$Numbers
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

$Lists
$Lists[[1]]
[1] "score"

$Lists[[2]]
[1] 12.3

2.访问列表

列表中的元素可以使用索引来访问,如果使用来 names() 函数命名后,我们还可以使用对应名字来访问:

实例:

R 复制代码
# 列表包含向量、矩阵、列表
list_data <- list(c("zhangsan","lisi","wangwu"), matrix(c(1,2,3,4,5,6), nrow = 2),
   list("score",12.3))

# 给列表元素设置名字
names(list_data) <- c("name", "Numbers", "Lists")

# 显示列表
print(list_data[1])

# 访问列表的第三个元素
print(list_data[3])

# 访问第一个向量元素
print(list_data$Numbers)
print(list_data[3])

执行以上代码输出结果为:

复制代码
$name
[1] "zhangsan" "lisi"     "wangwu"  

$Lists
$Lists[[1]]
[1] "score"

$Lists[[2]]
[1] 12.3


     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
$Lists
$Lists[[1]]
[1] "score"

$Lists[[2]]
[1] 12.3

3.操作列表元素

我们可以对列表进行添加、删除、更新的操作,如下实例:

实例:

R 复制代码
# 列表包含向量、矩阵、列表
list_data <- list(c("zhangsan","lisi","wangwu"), matrix(c(1,2,3,4,5,6), nrow = 2),
   list("score",12.3))

# 给列表元素设置名字
names(list_data) <- c("name", "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] "新元素"

$<NA>
NULL

$Lists
[1] "我替换来第三个元素"

4.使用 for 循环遍历列表

实例:

R 复制代码
# 创建一个包含数字和字符的列表
my_list <- list(1, 2, 3, "a", "b", "c")

# 使用 for 循环遍历列表中的每个元素
for (element in my_list) {
  print(element)
}

在以上代码中,for 循环会依次遍历列表 my_list 中的每个元素,并将每个元素存储在变量 element 中。然后,我们可以在循环体内对每个元素执行特定的操作,例如使用 print() 函数打印元素的值。

for 循环遍历列表时,每次循环都将当前元素赋值给变量 element。因此,在循环体内可以对 element 进行任何需要的操作,例如计算、条件判断等。

需要注意的是,使用 for 循环遍历列表时,循环变量 element 将依次取到列表中的每个元素,但不能直接修改列表元素本身。如果需要修改列表中的元素值,可以通过索引来实现,例如 my_list\[index] <- new_value。

执行以上代码输出结果为:

复制代码
[1] 1
[1] 2
[1] 3
[1] "a"
[1] "b"
[1] "c"

5.合并列表

我们可以使用 c() 函数将多个列表合并为一个列表:

实例:

R 复制代码
# 创建两个列表
list1 <- list(1,2,3)
list2 <- list("zhangsan","Lisi","wangwu")

# 合并列表
merged.list <- c(list1,list2)

# 显示合并后的列表
print(merged.list)

执行以上代码输出结果为:

复制代码
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] "zhangsan"

[[5]]
[1] "Lisi"

[[6]]
[1] "wangwu"

6.列表转换为向量

要将列表转换为向量可以使用 unlist() 函数,将列表转换为向量,可以方便我们进行算术运算:

实例:

R 复制代码
# 创建列表
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

7.归纳总结

以下是一些常用的 R 语言列表操作和函数:

创建列表:

  • 使用 c() 函数:例如,list1 <- c(1, 2, 3) 创建一个包含 1、2 和 3 的列表。
  • 使用 list() 函数:例如,list2 <- list(1, "a", TRUE) 创建一个包含不同类型元素的列表。

访问列表元素:

  • 使用索引:通过索引访问列表中的元素。例如,list11 返回列表中的第一个元素。
  • 使用元素名称:如果列表中的元素有名称,可以使用名称来访问它们。例如,list3 <- list(a = 1, b = 2) 可以通过 list3 a 和 l i s t 3 a 和 list3 a和list3b 来访问元素。

列表操作:

  • 长度:使用 length() 函数获取列表的长度。例如,length(list1) 返回列表 list1 的长度。
  • 合并:使用 c() 函数或 append() 函数将两个或多个列表合并为一个列表。例如,list4 <- c(list1, list2) 合并列表 list1 和 list2。
  • 增加元素:使用 c() 函数将元素添加到现有列表中。例如,list1 <- c(list1, 4) 将 4 添加到列表 list1 的末尾。
  • 删除元素:使用索引和负索引操作符 - 删除列表中的元素。例如,list1 <- list1-2 删除列表 list1 中的第二个元素。

列表循环:

  • for 循环:使用 for 循环遍历列表中的元素。例如,for (element in list1) { ... } 遍历列表 list1 中的每个元素。
  • lapply() 函数:将一个函数应用于列表中的每个元素,并返回结果列表。例如,new_list <- lapply(list1, function(x) x * 2) 将列表 list1 中的每个元素乘以 2。
相关推荐
VidDown8 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
遇印记10 小时前
传输层,网络层
运维·服务器·网络·windows·学习
死磕音视频10 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林10 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
又見山11 小时前
Obsidian 跨平台同步实测:Nutstore Sync 在 Windows、Mac、Linux、iOS、Android 全平台综合测评
windows·macos·obsidian·obsidian同步·obsidian教程·obsidian入门·obsidian笔记库搭建
pride.li12 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook12 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
康小旺12 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
jearry12 小时前
一个编辑器两个内核:Markdown 实时视图与源码视图并存时的竞态、光标锚点与 PDF 导出
windows·markdown
逆向编程13 小时前
DirectX修复工具下载安装教程-Windows系统DLL缺失检测修复完整图文步骤
windows