5. 列表(list)

R语言中的列表和Python等语言中的list有所不同。R语言中的列表是对象的集合, 列表中的对象又称为它的分量(components)。 分量可以包含向量、矩阵、数组,数据框,甚至是另外一个列表,且在列表中要求每一个分量都要有一个名称。

my_list <- list(stud_id=c(34453,123),
                 stud_name="John",
                 stud_marks=c(14.3,12,15,19))
my_list
#输出:
 $stud_id
 [1] 34453   123
 $stud_name
 [1] "John"
 $stud_marks
 [1] 14.3 12.0 15.0 19.0

5.1 列表的索引

使用列表的索引形式可以对列表中的元素进行访问,编辑或删除。

访问列表中的元素可以使用双重方括号来指明成分或使用成分的名称及位置来访问。

5.1.1 访问列表中某一个成分

list1[1] #访问列表中的第一个成分,使用这种方法,返回的结果仍为一个列表( 还可以使用list1['stu_id']的方式访问第一个成分)

# mode(my_list[1])
# 返回 "list"

5.1.2 访问列表中某一个成分的全部元素值

list1[[1]] #访问列表中的第一个成分的全部元素值,这次返回的是向量,不再是列表。( 还可以通过list1$stu_id访问名称为“stu_id”成分的全部元素。 )

# mode(list[[1]])
# 返回"numeric"

5.1.3 访问列表中某一个成分的某一个元素值

list[1] #访问列表第1个成分的第1个元素值

5.2 列表的编辑

5.2.1 添加或删除列表中的某一成分

原理与对列表中某一成分的索引相同

my_list$new_comp <- c(1,2,3,4) #若new_comp成分不存在,则直接添加该成分并赋值
my_list['new_comp'] <-list(c(1,2,3)) #若new_comp成分不存在,则直接添加该成分并赋值 
my_list$stu_id = NULL        #删除名称为stu_id的成分
my_list['stu_name'] = NULL   #删除名称为stu_name的成分

5.2.2 修改列表某一成分的元素值

方法同5.2.1,若该成分已存在,则修改该成分的元素值,如不存在,则创建新的成分

5.2.3 修改列表某一成分的某一元素值

原理与某一具体元素值的索引相同

my_list[[1]][2] <- c(1,2,3)  #修改列表中第一个成分的第2个元素值

5.3 列表的常用操作

  1. names( )函数可以显示并修改list中所有成分的名字
  2. length( )函数可以显示list中成分的个数
  3. unlist( )函数可以将list解包
#Example:
names(list1) <- c('a','b','c')

unlist(my.lst)
#输出:
stud_id1    stud_id2   stud_name stud_marks1 stud_marks2 stud_marks3 
     "34453"       "123"      "John"      "14.3"        "12"        "15" 
 stud_marks4 
        "19"