列表
列表(List)是R中最复杂的数据类型,一般来说,列表是数据对象的有序集合,但是,列表的各个元素(item)的数据类型可以不同,每个元素的长度可以不同,是R中最灵活的数据类型。列表项可以是列表类型,因此,列表被认为是递归变量,与之相对,向量,数组,矩阵,数据框被认为是原子变量。
列表由list()函数创建,每个参数使用逗号分割,用于指定列表项的内容,列表中的元素数量不限,类型不限。列表项的名称是可选的,可以创建无名的列表项;列表的每一个item,都可以显示命名,例如,name1=item1, name2=item2。
list([name1=]item1,[name2=]item2,...)
1
创建列表
例如,下面的脚本创建一个列表,该列表共有2个item,第一个item是names,及学生姓名,第二个item是ID,表示学生的学号。names和ID叫标签。
> 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
访问列表中组件
访问列表中组件的方法,用$符号或者[[]]。
> students$names[1] "Tom" "Ammy" "BioInfoCloud"> students[[1]][1] "Tom" "Ammy" "BioInfoCloud"> students[["ID"]][1] 1 2 3>
[[]]一次只能提取一个组件,返回的类型是组件的类型,不是列表。
> class(students[["ID"]]) # 判断类型[1] "numeric">
3
增加或删除列表中的元素
> 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()函数获取。
> names(students)[1] "names" "country">
可以用unlist()函数获取值,unlist()返回值就是一个向量,向量名来自标签。
> unlist(students) names1 names2 names3 country1 country2 "Tom" "Ammy" "BioInfoCloud" "English" "America" country3 "China" >
5
递归型列表
列表是可以递归的,意思是列表的组件可以是列表。
> 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,决定在拼接列表时是否把原列表"压平",就是把所有组件元素都提取出来,组合成一个向量。
> c(list(a=1,b=2,c=list(d=5,e=9)),recursive = T) a b c.d c.e 1 2 5 9
本文分享自 MedBioInfoCloud 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!