前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言基础教程——第3章:数据结构——列表

R语言基础教程——第3章:数据结构——列表

作者头像
DoubleHelix
发布2019-08-07 08:27:24
7341
发布2019-08-07 08:27:24
举报
文章被收录于专栏:生物信息云

列表

列表(List)是R中最复杂的数据类型,一般来说,列表是数据对象的有序集合,但是,列表的各个元素(item)的数据类型可以不同,每个元素的长度可以不同,是R中最灵活的数据类型。列表项可以是列表类型,因此,列表被认为是递归变量,与之相对,向量,数组,矩阵,数据框被认为是原子变量。

列表由list()函数创建,每个参数使用逗号分割,用于指定列表项的内容,列表中的元素数量不限,类型不限。列表项的名称是可选的,可以创建无名的列表项;列表的每一个item,都可以显示命名,例如,name1=item1, name2=item2。

代码语言:javascript
复制
list([name1=]item1,[name2=]item2,...)

1

创建列表

例如,下面的脚本创建一个列表,该列表共有2个item,第一个item是names,及学生姓名,第二个item是ID,表示学生的学号。names和ID叫标签。

代码语言:javascript
复制
> students = list( names = c("Tom","Ammy","BioInfoCloud"),ID = c(1,2,3))> students$names[1] "Tom"          "Ammy"         "BioInfoCloud"
$ID[1] 1 2 3
# 创建列表是可以不创建标签。> student = list( c("Tom","Ammy","BioInfoCloud"),c(1,2,3))> student[[1]][1] "Tom"          "Ammy"         "BioInfoCloud"
[[2]][1] 1 2 3

2

访问列表中组件

访问列表中组件的方法,用$符号或者[[]]。

代码语言:javascript
复制
> students$names[1] "Tom"          "Ammy"         "BioInfoCloud"> students[[1]][1] "Tom"          "Ammy"         "BioInfoCloud"> students[["ID"]][1] 1 2 3>

[[]]一次只能提取一个组件,返回的类型是组件的类型,不是列表。

代码语言:javascript
复制
> class(students[["ID"]]) # 判断类型[1] "numeric">

3

增加或删除列表中的元素

代码语言:javascript
复制
> students$country = c("English","America","China")> students$names[1] "Tom"          "Ammy"         "BioInfoCloud"
$ID[1] 1 2 3
$country[1] "English" "America" "China"  
> students$ID = NULL> students$names[1] "Tom"          "Ammy"         "BioInfoCloud"
$country[1] "English" "America" "China"  
>

4

访问列表元素和值

如果列表定义了标签,可以用names()函数获取。

代码语言:javascript
复制
> names(students)[1] "names"   "country">

可以用unlist()函数获取值,unlist()返回值就是一个向量,向量名来自标签。

代码语言:javascript
复制
> unlist(students)        names1         names2         names3       country1       country2          "Tom"         "Ammy" "BioInfoCloud"      "English"      "America"       country3        "China" >

5

递归型列表

列表是可以递归的,意思是列表的组件可以是列表。

代码语言:javascript
复制
> b = list(u= 5,v = 12)> c = list(w=13)> a = list(b,c)> a[[1]][[1]]$u[1] 5
[[1]]$v[1] 12

[[2]][[2]]$w[1] 13
> length(a)[1] 2> 

这段代码生成一个包含2个组件的列表,每个组件本身也是列表,拼接函数c()有一个可选参数recursive,决定在拼接列表时是否把原列表"压平",就是把所有组件元素都提取出来,组合成一个向量。

代码语言:javascript
复制
> c(list(a=1,b=2,c=list(d=5,e=9)),recursive = T)  a   b c.d c.e   1   2   5   9 
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MedBioInfoCloud 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档