本篇文章由 VeriMake 旧版论坛中备份出的原帖的 Markdown 源码生成
原帖标题为:R 语言 | 列表
原帖网址为:https://verimake.com/topics/224 (旧版论坛网址,已失效)
原帖作者为:dawdler(旧版论坛 id = 64,注册于 2020-08-17 14:01:22)
原帖由作者初次发表于 2021-05-28 15:52:49,最后编辑于 2021-05-28 15:52:49(编辑时间可能不准确)
截至 2021-12-18 14:27:30 备份数据库时,原帖已获得 363 次浏览、0 个点赞、0 条回复
R 列表
1. 创建列表
列表是一种R语言的对象的集合,其中的元素可以是数字、字符串、向量、矩阵、一个新的列表等等,也可以是一个函数,而且不同类型元素在同一个列表中可以同时存在。
R语言中,我们使用list()
函数来创建新的列表, 并且可以用names()
给每个元素命名。这个命名比较像赋予了每一个元素标签,我们可以通过访问标签来获取对应的值。
##create a list
vlist <- list("veri", "make", "study", c(12,3,4), 22, 8L)
print(vlist)
##add labels
mlist <- list(c("veri", "make", "study"), list("verimake", 88.8), matrix(c(1,2,3,4,5,6),2,3,byrow=TRUE))
names(mlist) <- c("the vector", "the list", "the matrix")
print(mlist) #每个元素会带着名字被打印
以上代码的输出结果为:
2. 访问列表
除了整个列表的输出,我们也可以通过访问元素位置或元素的名字来访问其中的某个元素。
注意:R语言中,列表里的元素位置,即index是从左往右从1开始数哦!不是0~
##access
mlist <- list(c("veri", "make", "study"), list("verimake", 88.8), matrix(c(1,2,3,4,5,6),2,3,byrow=TRUE))
names(mlist) <- c("the vector", "the list", "the matrix")
print(mlist[2])
print(mlist$"the matrix")
以上代码的输出结果为:
##3. 操作列表
同时,我们也可以在后面删除或修改已有元素,也可以增加新元素:
##operations
mlist <- list(c("veri", "make", "study"), list("verimake", 88.8), matrix(c(1,2,3,4,5,6),2,3,byrow=TRUE))
mlist[4] <- "new"
print(mlist)
mlist[3] <- NULL
print(mlist)
mlist[1] <- "lego"
print(mlist)
##function c() to merge to lists
#合并两个列表
vlist <- list("veri", "make", "study", c(12,3,4), 22, 8L)
mvlist <- c(mlist, vlist)
print(mvlist)
以上代码的输出结果为:
##4. 列表转成向量
抛开其中元素的层次不说,列表看起来也很像一个一维的向量,所以,我们可以通过函数unlist()
将列表转换为一个向量,其中的复杂元素也就会自然而然地被拆分开,其中向量会被按列拆分。
##unlist
mlist <- list(c("veri", "make", "study"), list("verimake", 88.8), matrix(c(1,2,3,4,5,6),2,3,byrow=TRUE))
vlist <- list("veri", "make", "study", c(12,3,4), 22, 8L)
m <- unlist(mlist)
v <- unlist(vlist)
print(m)
print(v)
以上代码的输出结果为:
注意:通常我们将列表转换为向量是针对纯数字列表进行这样的操作,以便于两个列表的数据的算术运算,这里只是做一个示例告诉大家常见几种类型的元素是怎么被拆分的。
相关资料:
https://www.runoob.com/r/r-list.html