4.1 创建列表
向量所有元素类型统一,结构单一。普通向量是原子型的
指定标签:
j <- list(name = "joe",salary = 55000, union = T)
不指定标签:这时有默认标签
j <- list("joe",55000,T)
4.2 列表的操作
4.2.1 列表的索引
单个值的索引 共三种方法:
j <- list(name = "joe",salary = 55000, union = T)
j$sal #可以缩写
j[["salaryl"]]#这时不能缩写
j[[2]]
多个值一起拿出来:
当有$ 属性时,说明是列表
j[1:2] #可以访问前两个元素,本质上是两个子列表
j[2] #是访问子列表,不是单个元素,虽然结果一样
4.2.2 增加或删除列表元素
列表创建后增加元素:
一、添加元素
添加一个:
z <- list(a = 'abc',b =12)
z$c <- "sailing"
z[[4]]<- "abh"
添加多个:
z[5:7] <- c(F,F,T)
二、删除元素:
删除一个:
直接赋值为NuLL
z$b <- NULL
注意删除z$b后,他之后元素的索引全部-1
4.2.3 多个列表拼接(c())
m <- c(list('joe',55000,T),list(5))
c()中有一个可选参数,recursive,默认为FALSE,当令其为TRUE时将会将源列表的组件压平 。
m <- c(list(a=1,b=2,c=list(d=5,e=7)),recursive = T)
m
结果:
4.2.4 获取列表长度
m <- c(list('joe',55000,T),list(5))
n <- length(m)
4.3 访问列表元素和值
4.3.1 获得列表的标签
m <- list(name = '123',int = 12,m ='ww')
names(m)
4.3.2 获得值
unlist()返回的是一个向量,都是数字是是数值型,若果都有的话就是按照优先级,比如:数字和字符串最后都是字符串类型
m <- list(name = 123,int = 12,m =11)
unlist(m) #返回的是一个向量,都是数字是是数值型,若果都有的话就是按照优先级,比如:数字和字符串最后都是字符串类型
z <- unlist(m)
这里的Z是一个数值型向量!,但是还是有元素名
z <- unlist(m) #保留了元素名字,但是不能调用
names(z)
q <- unname(z) #去掉了元素名
q
4.3.4 各种类型的优先级
NULL<RAW<逻辑类型<整型<实数类型<复数类型<列表<表达式(把配对列表(parist当作普通列表))
4.4 在列表上使用apply系列函数
用于批量调用函数
4.4.1 lapply()和sapply()的使用
lapply():对列表按中的组件执行给定的函数,并返回一个列表。
lapply(list(1:3,15:19),median)
sapply():返回的向量
sapply(list(1:3,15:19),median)
4.4.3 扩展案例:文本词汇索引
第一步、输出各个单词出现的索引
findwords <- function(tf){
txt <- scan(tf,"")
wd <- list()
for (i in 1:length(txt)){
wrd <- txt[i]
wd[[wrd]] <- c(wd[[wrd]],i)
}
return (wd)
}
setwd("D:/Rfiles/project1")
source("findwords.R",encoding="utf-8")
findwords("1.txt")
结果:(部分)
第二步:将单词按照首字母进行排序
4.4.2 拓展案例:鲍鱼数据
4.5 递归型列表
列表是可以递归的(recursive),即列表的组件也可以是列表
b <- list(u=5, v= 12)
c <- list(w = 13)
a <- list(b,c)
a
输出结果: