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

列表

列表(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(MedBioInfoCloud)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏烟草的香味

23种设计模式之解释器模式

定义: 给定一门语言,定义它的文法的一种表示, 并定义一个解释器, 该解释器使用该表示来解释语言中的句子.

7560
来自专栏前端自习课

【JS】250- 十大排序的算法思路和代码实现

本文内容包括:(双向)冒泡排序、选择排序、插入排序、快速排序(填坑和交换)、归并排序、桶排序、基数排序、计数排序(优化)、堆排序、希尔排序。大家可以在这里测试代...

6820
来自专栏前端自习课

【JS】246-如何在JavaScript面试中过五关斩六将?

JavaScript 面试不容易。我觉得难,你也觉得不容易,大家的意见不谋而合。在 JavaScript 面试中被问问题的概率通常很高。那么该如何破解 JS 面...

8830
来自专栏烟草的香味

23种设计模式之访问者模式

定义: 封装一些作用于某种数据结构中的各元素的操作, 它可以在不改变数据结构的前提下定义作用于这些元素的新的操作

7530
来自专栏微卡智享

Delphi7用superobject解析Json数据

现在不管Webapi还是一般的数据通讯,用的基本都是Json,以前很多的应用程序都是用delphi7开发的,为了维护旧的程序以及与新的接口进行对接(如微信支付宝...

86810
来自专栏前端自习课

【Web技术】252- Hybrid 应用中 H5 与 NA 通信的那点事儿

Hybrid App 是半原生半 web 的开发模式,部分界面或者功能是原生的,其余部分是 html 和 js 来完成,最终 webview 加载 H5 页面;...

17920
来自专栏微卡智享

《实战案例分享》关于语音识别的功能实现分析(二)---语义解析

前面我们刚刚介绍了语音识别的第一步《《实战案例分享》关于语音识别的功能实现分析(一)---结构化思维》,这一章我们接着上次的内容来看一下语义的解析。

8130
来自专栏前端自习课

【Web技术】245-全面了解Cookie

浏览器和服务器之间的通信少不了HTTP协议,但是因为HTTP协议是无状态的,所以服务器并不知道上一次浏览器做了什么样的操作,这样严重阻碍了交互式Web应用程序的...

7410
来自专栏微卡智享

DELPHI中自适应窗体的实现

我们知道,屏幕分辨率的设置影响着表单布局,假设你的机器上屏幕分辨率是800*600,而最终 要分发应用的机器分辨率为640*480,或1024*768,这样你原...

8240
来自专栏烟草的香味

设计模式之行为类模式PK

策略模式和命令模式相似, 特别是命令模式退化时,比如无接收者(接收者非常简单或者接收者是Java的基础操作,无需专门写一个接收者), 这种情况下, 命令模式和策...

8120

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励