美文网首页
R语言基础教程 | 数据结构—列表

R语言基础教程 | 数据结构—列表

作者: 生信师姐 | 来源:发表于2021-06-15 07:46 被阅读0次

    列表(List)是R中最复杂的数据类型,一般来说,列表是数据对象的有序集合,但是,列表的各个元素(item)的数据类型可以不同,每个元素的长度可以不同,是R中最灵活的数据类型。列表项可以是列表类型,因此,列表被认为是递归变量,与之相对,向量,数组,矩阵,数据框被认为是原子变量。

    列表由list()函数创建,每个参数使用逗号分割,用于指定列表项的内容,列表中的元素数量不限,类型不限。列表项的名称是可选的,可以创建无名的列表项;列表的每一个item,都可以显示命名,例如,name1=item1, name2=item2。

    list([name1=]item1, [name2=]item2, ...)
    

    1.创建列表

    例如,下面的脚本创建一个列表,该列表共有2个item,第一个item是names 学生姓名,第二个item是ID,表示学生的学号。names和ID叫标签

    > students = list( names = c("Tom","Ammy","BioInfoCloud"),ID = c(1,2,3))
    > students
    $names
    [1] "Tom"          "Ammy"         "BioInfoCloud"
    
    $ID
    [1] 1 2 3
    
    # 创建列表是可以不创建标签。
    > student = list( c("Tom","Ammy","BioInfoCloud"),c(1,2,3))
    > student
    [[1]]
    [1] "Tom"          "Ammy"         "BioInfoCloud"
    
    [[2]]
    [1] 1 2 3
    

    2.访问列表中组件

    访问列表中组件的方法,用$符号或者[[]]

    > students$names
    [1] "Tom"          "Ammy"         "BioInfoCloud"
    > students[[1]]
    [1] "Tom"          "Ammy"         "BioInfoCloud"
    > students[["ID"]]
    [1] 1 2 3
    >
    

    [[]]一次只能提取一个组件,返回的类型是组件的类型,不是列表。

    > class(students[["ID"]]) # 判断类型
    [1] "numeric"
    

    3.增加或删除列表中的元素

    > students$country = c("English","America","China")
    > students
    $names
    [1] "Tom"          "Ammy"         "BioInfoCloud"
    
    $ID
    [1] 1 2 3
    
    $country
    [1] "English" "America" "China"  
    
    
    
    
    > students$ID = NULL
    > students
    $names
    [1] "Tom"          "Ammy"         "BioInfoCloud"
    
    $country
    [1] "English" "America" "China"  
    

    4.访问列表元素和值

    如果列表定义了标签,可以用names()函数获取。

    > names(students)
    [1] "names"   "country"
    >
    

    可以用unlist()函数获取值,unlist()返回值就是一个向量,向量名来自标签。

    > unlist(students)
            names1         names2         names3       country1       country2 
             "Tom"         "Ammy" "BioInfoCloud"      "English"      "America" 
          country3 
           "China" 
    

    5.递归型列表

    列表是可以递归的,意思是列表的组件可以是列表。

    > b = list(u= 5,v = 12)
    > c = list(w=13)
    > a = list(b,c)
    > a
    [[1]]
    [[1]]$u
    [1] 5
    
    [[1]]$v
    [1] 12
    
    
    [[2]]
    [[2]]$w
    [1] 13
    
    > length(a)
    [1] 2
    > 
    

    这段代码生成一个包含2个组件的列表,每个组件本身也是列表,拼接函数c()有一个可选参数recursive,决定在拼接列表时是否把原列表"压平",就是把所有组件元素都提取出来,组合成一个向量。

    > c(list(a=1,b=2,c=list(d=5,e=9)),recursive = T)
      a   b c.d c.e 
      1   2   5   9 
    

    相关文章

      网友评论

          本文标题:R语言基础教程 | 数据结构—列表

          本文链接:https://www.haomeiwen.com/subject/emqeeltx.html