R中列表(list)类型来保存不同类型的数据。
一个主要目的是提供R分析结果输出包装:
输出一个变量,
这个变量包括回归系数、预测值、残差、检验结果等等一系列不能放到规则形状数据结构中的内容。
实际上,数据框也是列表的一种,
但是数据框要求各列等长,
而列表不要求。
列表可以有多个元素,
但是与向量不同的是,
列表的不同元素的类型可以不同,
比如,
一个元素是数值型向量,
一个元素是字符串,
一个元素是标量,
一个元素是另一个列表。
定义列表用函数list()
, 如
rec <- list(name="李明", age=30,
scores=c(85, 76, 90))
rec
## $name
## [1] "李明"
##
## $age
## [1] 30
##
## $scores
## [1] 85 76 90
用typeof()
函数判断一个列表,
返回结果为list
。
可以用is.list()
函数判断某个对象是否列表类型。
为了生成元素为空的长度为n
的列表,程序如:
11.2 列表元素访问
列表的一个元素也可以称为列表的一个“变量”,
单个列表元素必须用两重方括号格式访问,如
列表的单个元素也可以用$
格式访问,如
如果使用单重方括号对列表取子集,
结果还是列表而不是列表元素,如
列表一般都应该有元素名,
元素名可以看成是变量名,
列表中的每个元素看成一个变量。
用names()
函数查看和修改元素名。
如
names(rec)
## [1] "name" "age" "scores"
names(rec)[names(rec)=="scores"] <- "三科分数"
names(rec)
## [1] "name" "age" "三科分数"
rec[["三科分数"]]
## [1] 85 76 90
可以修改列表元素内容。
如
rec[["三科分数"]][2] <- 0
print(rec)
## $name
## [1] "李明"
##
## $age
## [1] 30
##
## $三科分数
## [1] 85 0 90
直接给列表不存在的元素名定义元素值就添加了新元素,
而且不同于使用向量,对于列表而言这是很正常的做法,比如
## $name
## [1] "李明"
##
## $age
## [1] 30
##
## $三科分数
## [1] 85 0 90
##
## $身高
## [1] 178
把某个列表元素赋值为NULL
就删掉这个元素。
如
rec[["age"]] <- NULL
print(rec)
## $name
## [1] "李明"
##
## $三科分数
## [1] 85 0 90
##
## $身高
## [1] 178
在list()
函数中允许定义元素为NULL
,这样的元素是存在的,如:
但是,要把已经存在的元素修改为NULL值而不是删除此元素,
或者给列表增加一个取值为NULL的元素,
这时需要用单重的方括号取子集,
这样的子集会保持其列表类型,
给这样的子列表赋值为list(NULL)
,如:
11.3 列表类型转换
用as.list()
把一个其它类型的对象转换成列表;
用unlist()
函数把列表转换成基本向量。如
11.4 连接列表
两个列表可以用c
连接成一个列表,
如:
li1 <- list(1:2)
li2 <- list(11:12)
li <- c(li1, li2)
li
## [[1]]
## [1] 1 2
##
## [[2]]
## [1] 11 12
如下的做法没有达到目的:
li <- list()
li <- c(li, 1:3)
li <- c(li, 11:13)
li
## [[1]]
## [1] 1
##
## [[2]]
## [1] 2
##
## [[3]]
## [1] 3
##
## [[4]]
## [1] 11
##
## [[5]]
## [1] 12
##
## [[6]]
## [1] 13
需要改为:
11.5 返回列表的函数示例–strsplit()
strsplit()
输入一个字符型向量并指定一个分隔符,
返回一个项数与字符型向量元素个数相同的列表,
列表每项对应于字符型向量中一个元素的拆分结果。
如
x <- c("10, 8, 7", "5, 2, 2", "3, 7, 8", "8, 8, 9")
res <- strsplit(x, ","); res
## [[1]]
## [1] "10" " 8" " 7"
##
## [[2]]
## [1] "5" " 2" " 2"
##
## [[3]]
## [1] "3" " 7" " 8"
##
## [[4]]
## [1] "8" " 8" " 9"
为了把拆分结果进一步转换成一个数值型矩阵,
可以使用sapply()
函数如下:
t(sapply(res, as.numeric))
## [,1] [,2] [,3]
## [1,] 10 8 7
## [2,] 5 2 2
## [3,] 3 7 8
## [4,] 8 8 9
sapply()
函数是apply类函数之一,
稍后再详细进行讲解。
韭菜热线原创版权所有,发布者:风生水起,转载请注明出处:https://www.9crx.com/77953.html