在R语言中,向量、矩阵和数组的元素要求必须是同一类型的数据。在使用过程中,可能一个数据对象需要保存不同类型的数据,则可以使用列表来实现。
列表是对象的集合,可以包含向量、矩阵、数组,数据框,甚至是另外一个列表,且在列表中要求每一个成分都要有一个名称。
列表中的对象又称为它的分量。
- 列表的建立
我们用list函数来创建列表,其函数原型为:
list(...)
例子:
a <- list(姓名 = "张三", 工资 = 1800, 性别 = "男")
a <- list(姓名 = c("张三","李四"), 工资 = c(1800,2800),c(性别 = "男", "女"))
a <- list(姓名 = c("张三","李四","王五"), 工资 =c(1800,2800),c(性别 = "男", "女"))
a <- list(c("张三","李四","王五"), c(1800,2800), c("男","女")) #标签是可选的,没有指定标签的情况
a <- list(姓名 = c("张三","李四","王五"),科目 = c("语文","数学","英语","物理","计算机"),成绩 = matrix(sample(1:100,15),nrow = 3)) #包含矩阵的情况
图一
图二
- 列表的索引
一、直接索引
myList <- list(姓名 = "张三", 工资 = 1800, 性别 = "男")
myList[1] #访问列表中的第1个成分,使用这种方法,返回的结果仍为一个列表
myList[[1]] #这次是元素值,是向量,不再是列表
myList[1:3] #访问列表中的第一个到第三个成分
myList[c(1,3)] #访问列表中的第一个和第三个成分
myList[-1] #排除第一个成分
二、使用名称索引
myList <- list(姓名 = "张三", 工资 = 1800, 性别 = "男")
myList$姓名 #访问成分名称为“姓名”的元素值,返回的是向量
myList["姓名"] #访问成分名称为“姓名”的成分,返回的是一个列表
myList[["姓名"]] #与第一个等价
三、二级索引
myList <- list(姓名 = "张三", 工资 = 1800, 性别 = "男")
myList[[1]][1] #访问第一个成分中的第一个值
myList$姓名[1]
myList[["姓名"]][1]
- 列表的编辑
myList <- list(姓名 = "张三", 工资 = "1000", 性别 = "男")
#修改某个成分的元素值
myList[[1]][1] <- "小明"
myList$姓名[1] <- "小明"
myList[["姓名"]][1] <- "小明"
#修改某一成分的所有值
myList$姓名 = c("翠花","小刚")
myList[[1]] = c("翠花","小刚")
mylist[c(1,2)] = c(list(c("赵六", "王五"),list(c("male","female")))
#添加一个成分
myList$地址 = "天津市"
myList <- c(myList, 地址 = list("天津市"))
#删除某一个成分
myList[1] <- NULL
myList[[1]] <- NULL
myList$姓名 <- NULL
myList["姓名"] <- NULL
myList[["姓名"]] <- NULL
myList <- myList[-1]
- 参考资料
《R语言实战》第二版
上述的使用帮助都可以使用help
函数进行查询。