r语言学习第七篇:列表(代码片段)

悦光阴 悦光阴     2022-10-23     399

关键词:

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

一,创建列表

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

list([name1=]item1,[name2=]item2,...)

1,创建的无名的列表项

例如,下面的脚本创建一个列表,该列表共有三个item,第一个item是整数向量,第二个item是字符向量,第三个item是矩阵,列表的每一个item都没有名称:

> a_list=list(
+     c(1:3),
+     month.abb,
+     matrix(c(-1,-2,-3,-4),nrow=2)
+ )

打印列表,列表的第一个item,使用两个嵌套的中括号[[1]]表示,这是索引列表的一种方式:

> a_list
[[1]]
[1] 1 2 3

[[2]]
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

[[3]]
     [,1] [,2]
[1,]   -1   -3
[2,]   -2   -4

2,创建命名的列表项

通过指定列表项的变量名,为每一个列表项显示指定名称,列表项的命名是变量名,不需要加双引号:

>  a_list=list(
+         a=c(1:3),
+         b=month.abb,
+         c=matrix(c(-1,-2,-3,-4),nrow=2)
+      )
> a_list
$a
[1] 1 2 3

$b
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

$c
     [,1] [,2]
[1,]   -1   -3
[2,]   -2   -4

二,列表元素的命名

使用函数names(list)查看列表中每个item的名称,如果创建列表是无名列表项,那么该函数返回NULL;可以对该函数names(list)赋值,为列表的每个item命名:

> names(a_list)=c(first,second,third)
> a_list
$first
[1] 1 2 3

$second
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

$third
     [,1] [,2]
[1,]   -1   -3
[2,]   -2   -4

> names(a_list)
[1] "first"  "second" "third" 

三,列表的长度

列表没有维度,列表和向量一样,有长度(length),可以使用函数length()获取列表的长度,列表的长度是列表的顶层item的数量,不包括嵌套的列表项。

> length(a_list)
[1] 3

函数NROW(),NCOL()把列表看作向量,是只有一列,多行的数据结构,因此NCOL(x)始终返回1,而NROW(x)返回的值和length(x)相同

> NCOL(a_list)
[1] 1
> NROW(a_list)
[1] 3

四,索引列表

可以使用中括号索引列表的元素,下标有四种表示方法:正整数,负整数,元素名称或逻辑索引,例如,a_list[1:2], a_list[-3], a_list[c(‘first‘,‘second‘)], a_list[c(TURE,TRUE,FALSE)] 这四种方法返回的结果相同:

> a_list[1:2]
$first
[1] 1 2 3

$second
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

这些索引操作的结果是另一个列表,这意味着,使用单个中括号,返回的是一个新的列表,要访问列表元素的内容,有两种方式:使用嵌套的中括号(传入正整数,代表列表项的下标,或传入字符串,代表列表项的名称),或指定元素的名称

例如,通过嵌套的中括号和下标,获取列表的第一个项目(item)的值:

> a_list[[1]]
[1] 1 2 3

例如,通过指定元素的名称作为下标,获取列表的第一个项目(item)的值:

> a_list$first
[1] 1 2 3

在访问列表的元素之后,可以通过中括号访问列表项的元素值,例如,列表的第一个项目是向量,通过中括号和下标,能够访问向量的第一个元素的值:

> a_list$first[1]
[1] 1
> a_list[[1]][1]
[1] 1

如果以错误的正整数索引访问列表元素的内容,R会抛出下标越界的错误,而使用错误的列表项(item)的名称,R会返回NULL值,不会报错:

> a_list[[4]]
Error in a_list[[4]] : subscript out of bounds
> a_list$forth
NULL

五,NULL值和NA值

NULL是个特殊值,表示未知值,NA表示缺失值,NULL和NA之间最大的区别是:NA是一个标量值,长度为1,而NULL不会占用任何空间,长度为零:

> length(NA)
[1] 1
> length(NULL)
[1] 0

使用is.null函数验证NULL值,使用is.na函数验证NA值:

> is.null(NULL)
[1] TRUE
> is.na(NA)
[1] TRUE

六,列表项的追加、删除和更新

列表创建之后,可以向列表中追加元素,也可以删除现有的列表元素

1,删除列表元素

NULL能够用于删除列表中的元素,把列表项设置为NULL,则会删除该列表项,在该列表项之后的元素,其索引都要减少1:

例如,把第一个列表项删除,原第二个列表项的索引变成1,原第三个列表的索引变成2:

a_list[1]=NULL
> a_list
$second
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

$third
     [,1] [,2]
[1,]   -1   -3
[2,]   -2   -4

2,追加列表元素

项列表中追加新的列表项,可以使用嵌套的中括号(在列表末尾追加未命名的列表项),或直接使用新的列表项的名称(在列表末尾追加已命名的列表项):

> a_list[[3]]=c(1:3)
> a_list$fifth=c(‘a‘,‘b‘)
> a_list
$second
 [1] "Jan" "Feb" "Mar" "Apr" "May" "Jun" "Jul" "Aug" "Sep" "Oct" "Nov" "Dec"

$third
     [,1] [,2]
[1,]   -1   -3
[2,]   -2   -4

[[3]]
[1] 1 2 3

$fifth
[1] "a" "b"

3,列表项的更新

更新列表项,这可以通过直接访问列表项,把列表项赋值为新的变量的值来实现,例如,把列表的第三个列表项修改为list变量:

> a_list[[3]]=list(‘L1‘,‘L2‘)
> a_list[[3]]
[[1]]
[1] "L1"

[[2]]
[1] "L2"

七,列表和向量的相互转换

向量可以使用函数as.list函数转换成列表,所创建的列表和向量中的元素一一对应:

> v=c(1,3)
> (l=as.list(v))
[[1]]
[1] 1

[[2]]
[1] 3

列表既能存储相同的类型的数据,也能存储不同类型的数据,如果列表的所有列表项的数据类型相同,可以通过unlist函数把列表转换成向量:

> unlist(l)
[1] 1 3

 

 

参考文档:

R--列表

python学习第七篇:sys标准库(代码片段)

​Python学习第七篇:sys标准库——活动地址:CSDN21天学习挑战赛——Python的sys模块提供访问由解释器使用或维护的变量的接口,并提供了一些函数用来和解释器进行交互,操控Python的运行时环境。要进行使用,... 查看详情

python学习第七篇:sys标准库(代码片段)

​Python学习第七篇:sys标准库——活动地址:CSDN21天学习挑战赛——Python的sys模块提供访问由解释器使用或维护的变量的接口,并提供了一些函数用来和解释器进行交互,操控Python的运行时环境。要进行使用,... 查看详情

混合编程jni第七篇之jni的命令行们(代码片段)

 系列目录:【混合编程Jni】系列目录_香菜聊游戏的博客-CSDN博客        今天将继续JNI的学习,jni编程中常使用的一些命令行工具如何使用事半功倍,今天就快速的过一下,希望在接下来的使用中... 查看详情

kubernetes第七篇:pod进阶controller进阶resource和dashboard(代码片段)

文章目录一、前言二、Pod进阶学习之路2.1Pod的生命周期Lifecycle2.2Pod的重启策略RestartPolicy2.3静态Pod2.4Pod的健康检查2.5ConfigMap2.5.1ConfigMap的创建创建方式1:命令行创建configmap创建方式2:根据配置文件中创建configmap创建方式3&#... 查看详情

第七篇camunda系列-身份服务(代码片段)

身份服务  在流程定义中在任务结点的assignee固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多个候选人或... 查看详情

第七篇:react-hooks设计动机与工作模式(下)(代码片段)

经过第6课时的学习,相信你已经清楚了React-Hooks的来头,并理解了其背后的“设计动机”。本课时我们的任务是构建对React-Hooks的整体认知。在本课时的主体部分,我将通过一系列的编码实例来帮助你认识useState、useEf... 查看详情

flask初识,第七篇,flask中的路由(代码片段)

 Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用@app.route("/",methods=["GET","POST"])为什么要这么用?其中的工作原理我们知道多少?请关注跟DragonFire学Flask之路由系统,这里有你想要的答案 1.@app.route()装饰器... 查看详情

第七篇flowable核心内容之任务分配(代码片段)

Flowable的任务分配1.任务分配1.1固定分配  固定分配就是我们前面介绍的,在绘制流程图或者直接在流程文件中通过Assignee来指定的方式1.2表达式分配  Flowable使用UEL进行表达式解析。UEL代表UnifiedExpressionLanguage,是EE6... 查看详情

第七篇camunda系列-身份服务(代码片段)

身份服务  在流程定义中在任务结点的assignee固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn文件中,如果临时任务负责人变更则需要修改流程定义,系统可扩展性差。针对这种情况可以给任务设置多... 查看详情

pytorch深度学习50篇·······第七篇:gan生成对抗网络---pix2pix(代码片段)

可能看过看过我上两篇GAN和CGAN的朋友们都认为,mnist数据太简单了,也不太适合拿出去show,所以我们来一个复杂一点的,这次难度比之前两篇的难度又有所提升了,所以,请大家不要慌张,紧跟脚步&#x... 查看详情

数据分析第七篇:相关分析(代码片段)

相关分析是数据分析的一个基本方法,可以用于发现不同变量之间的关联性,关联是指数据之间变化的相似性,这可以通过相关系数来描述。发现相关性可以帮助你预测未来,而发现因果关系意味着你可以改变世界。 一,协... 查看详情

vue学习之路第七篇:跑马灯项目实现(代码片段)

前面六篇讲解了Vue的一些基础知识,正所谓:学以致用,今天我们将用前六篇的基础知识,来实现类似跑马灯的项目。学前准备:需要掌握定时器的两个函数:setInterval和clearInterval以及作用域的概念上代码,大家可以复制下来直... 查看详情

jdk11|第七篇:zgc垃圾收集器(代码片段)

文章首发于公众号《程序员果果》地址:https://mp.weixin.qq.com/s/gfdml-SfvhFdMXlAu-a61w一、简介Java11包含一个全新的垃圾收集器--ZGC,它由Oracle开发,承诺在数TB的堆上具有非常低的暂停时间。在本文中,我们将介绍开发新GC的动机,技术... 查看详情

advancedlocomotionsystemv第七篇c++实现角色蹲伏和跑步细节(代码片段)

目前阶段结果展示也get到了怎么去做精斗云移动动作😳😳😳😳查看所有文章AdvancedLocomotionSystemV思维导图站立行走运动细节说明pivot触发储存在八向移动中:然后再通知中将其开启。站立姿态与行走姿态之间... 查看详情

advancedlocomotionsystemv第七篇c++实现角色蹲伏和跑步细节(代码片段)

目前阶段结果展示也get到了怎么去做精斗云移动动作😳😳😳😳查看所有文章AdvancedLocomotionSystemV思维导图站立行走运动细节说明pivot触发储存在八向移动中:然后再通知中将其开启。站立姿态与行走姿态之间... 查看详情

测开之函数进阶篇・第七篇《装饰器》(代码片段)

目录装饰器开放封闭原则装饰器的作用装饰器的应用场景实现一个装饰器装饰器原理阐述带参数的装饰器装饰器装饰类定义一个时间装饰器装饰器开放封闭原则软件实体应该是可扩展、而不可修改的。也就是说,对扩展是开... 查看详情

jdk11|第七篇:zgc垃圾收集器(代码片段)

一、简介Java11包含一个全新的垃圾收集器--ZGC,它由Oracle开发,承诺在数TB的堆上具有非常低的暂停时间。在本文中,我们将介绍开发新GC的动机,技术概述以及由ZGC开启的一些可能性。那么为什么需要新GC呢?毕竟Java10已经有四... 查看详情

go语言第七篇:go函数

Go语言函数函数是基本的代码块,用于执行某个任务。Go语言最少有个main()函数,可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。函数声明告诉了编译器函数的名称,返回类型和参数。Go语言标准库提供了多... 查看详情