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

 结果:

R语言把多个图拼在一起 r语言组图_字符串

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)

R语言把多个图拼在一起 r语言组图_开发语言_02

这里的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")

 结果:(部分)

R语言把多个图拼在一起 r语言组图_开发语言_03

第二步:将单词按照首字母进行排序

4.4.2 拓展案例:鲍鱼数据

4.5 递归型列表

列表是可以递归的(recursive),即列表的组件也可以是列表

b <- list(u=5, v= 12)
c <- list(w = 13)
a <- list(b,c)
a

R语言把多个图拼在一起 r语言组图_r语言_04

输出结果:

R语言把多个图拼在一起 r语言组图_r语言_05