13.列表类型


(学习资料参考北京大学李东风老师《R语言教程》)

13 列表类型

13.1 列表

R中列表(list)类型来保存不同类型的数据。 一个主要目的是提供R分析结果输出包装: 输出一个变量, 这个变量包括回归系数、预测值、残差、检验结果等等一系列不能放到规则形状数据结构中的内容。 实际上,数据框也是列表的一种, 但是数据框要求各列等长, 而列表不要求。

列表可以有多个元素, 但是与向量不同的是, 列表的不同元素的类型可以不同, 比如, 一个元素是数值型向量, 一个元素是字符串, 一个元素是标量, 一个元素是另一个列表。

我们尝试定义一个列表,如:

rec <- list(name="李明", age=30,
           scores=c(85, 76, 90))
rec

在这里插入图片描述
这时候,在右侧出现:
在这里插入图片描述
typeof() 函数判断一个列表, 返回结果为list。 可以用 is.list() 函数判断某个对象是否列表类型。
在这里插入图片描述

13.2 列表元素访问

  1. 列表的一个元素也可以称为列表的一个“变量”, 单个列表元素必须用两重方括号格式访问,如
rec[[3]]

在这里插入图片描述
再看一下选取这一行第二列的元素,如下:

rec[[3]][2]

在这里插入图片描述
下面试一下取特定列:

rec[["age"]]

  1. 如果使用单重方括号对列表取子集, 结果还是列表而不是列表元素,如:
rec[3]

在这里插入图片描述
列表的单个元素也可以用 $ 格式访问,如:

rec$age


列表一般都应该有元素名, 元素名可以看成是变量名, 列表中的每个元素看成一个变量。 用 names() 函数查看和修改元素名。

  1. 首先查看一下列表 rec 每个元素的名称:
names(rec)

在这里插入图片描述

  1. 再看一下如何将scores改名:
names(rec)[names(rec)=='scores'] <- '三科分数'
names(rec)

  1. 同样可以对元素内容进行修改:
rec[["三科分数"]][2] <- 0
print(rec)

在这里插入图片描述

  1. 如果想加上一个没有的元素,直接给列表不存在的元素名定义元素值就添加了新元素, 而且不同于使用向量,对于列表而言这是很正常的做法,比如:
rec[['身高']] <- 178
print(rec)

在这里插入图片描述
这样就加上了身高的元素。

  1. 如果想删掉一个元素,把某个列表元素赋值为NULL就可以。 如:
rec[['age']] <- NULL
print(rec)

在这里插入图片描述

  1. 在list()函数中允许定义元素为NULL,这样的元素是存在的,如:
li <- list(a=120, b='F', c=NULL); li


ps.但是,要把已经存在的元素修改为NULL值而不是删除此元素, 或者给列表增加一个取值为NULL的元素, 这时需要用单重的方括号取子集, 这样的子集会保持其列表类型, 给这样的子列表赋值为 list(NULL),如:

li['b'] <- list(NULL)
li['d'] <- list(NULL)
li

在这里插入图片描述
要和上面删除元素进行区分

13.3 列表类型转换

as.list() 把一个其它类型的对象转换成列表; 用 unlist() 函数把列表转换成基本向量。如:

li1 <- as.list(1:3)
li1

li2 <- list(x=1, y=c(2,3))
unlist(li2)

在这里插入图片描述

13.4 返回列表的函数示例–strsplit()

strsplit() 输入一个字符型向量并指定一个分隔符, 返回一个项数与字符型向量元素个数相同的列表, 列表每项对应于字符型向量中一个元素的拆分结果。 如:

x <- c('10, 8, 7', '5, 2, 2', '3, 7, 8', '8, 8, 9')
res <- strsplit(x, ','); res

在这里插入图片描述
可以看到,现在得到的结果有" " ,为了把拆分结果进一步转换成一个数值型矩阵, 可以使用 sapply() 函数如下:

t(sapply(res, as.numeric))

在这里插入图片描述

这一节主要看前面的,对于列表的取元素、改元素名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值