R语言初级教程(18): 列表

作者: R语言和Python学堂 | 来源:发表于2018-12-02 15:45 被阅读12次
    R中的数据结构

    在这篇博客,你将学习如何在R中使用列表(list)。之前我们提过,列表可包含不同类型的元素,比如数字、字符串、向量、矩阵,甚至列表中也可包含另一个列表。后面你将会知道,数据框(data frame)也是一种列表,只是比较特殊而已。

    接下来,你将学习如何创建、访问、修改以及删除列表中的元素

    1. 创建列表

    在R中,一般用list()函数来创建列表,来看个例子:

    > items <- list(a=c(1, 4, 7), b=c('apple', 'orange'), c=3)
    > items
    $`a`
    [1] 1 4 7
    
    $b
    [1] "apple"  "orange"
    
    $c
    [1] 3
    

    可以用str()函数来了解其内部结构:

    > str(items)
    List of 3
     $ a: num [1:3] 1 4 7
     $ b: chr [1:2] "apple" "orange"
     $ c: num 3
    

    其中a, bc是各元素的名称(标签),通过它们可以很方便地访问元素。然而,我们也可以不要标签,这种情况下,默认用数字来做索引。

    > items2 <- list(c(1, 4, 7), c('apple', 'orange'), 3)
    > items2
    [[1]]
    [1] 1 4 7
    
    [[2]]
    [1] "apple"  "orange"
    
    [[3]]
    [1] 3
    

    此外,我们可以通过is.list()typeof()函数来判断某个变量是否为列表,通过length()函数来获得其长度。

    > is.list(items)
    [1] TRUE
    > typeof(items)
    [1] "list"
    > length(items)  ##含有3个元素
    [1] 3
    

    2. 访问列表

    类似于向量,列表的访问也可以利用整数、逻辑以及字符向量来索引,比如:

    > items <- list(a=c(1, 4, 7), b=c('apple', 'orange'), c=3)
    > items[c(1, 3)]   ##通过正整数向量来索引
    $`a`
    [1] 1 4 7
    
    $c
    [1] 3
    
    > items[-3]   ##通过负整数来排除第3个元素
    $`a`
    [1] 1 4 7
    
    $b
    [1] "apple"  "orange"
    
    > items[c(TRUE, FALSE, TRUE)]  ##使用逻辑向量来索引
    $`a`
    [1] 1 4 7
    
    $c
    [1] 3
    
    > items[c('b', 'c')]   ##使用字符向量来索引
    $`b`
    [1] "apple"  "orange"
    
    $c
    [1] 3
    

    从上面知道,[ ]返回的还是一个列表,没有返回元素的内容。我们可以使用[[ ]]来获取元素的内容,比如:

    > items['a']  ##单个[]返回的还是列表
    $`a`
    [1] 1 4 7
    
    > typeof(items['a'])
    [1] "list"
    
    > items[['a']]  ##两个[]返回具体内容
    [1] 1 4 7
    > typeof(items[['a']])
    [1] "double"
    

    我们也可以用$操作符来获取内容,其功能基本上与[[ ]]相同,不过$还支持部分匹配标签,比如:

    > x <- list(a=c(1, 4, 7), bbb=c('apple', 'orange'), c=3)
    > x$bbb
    [1] "apple"  "orange"
    > x$b     ##支持部分匹配,结果与x$bb, x$bbb相同
    [1] "apple"  "orange"
    
    > x[['b']]   ##不支持部分匹配
    NULL
    
    > x$bbb[1]  ##结合[ ]获取元素内部具体内容
    [1] "apple"
    > x$bbb[2]  ##结合[ ]获取元素内部具体内容
    [1] "orange"
    

    3. 修改列表

    类似于向量,利用赋值运算可进行列表元素的修改,比如:

    > x$c <- FALSE   ##或者x[['c']] <- FALSE
    > x
    $`a`
    [1] 1 4 7
    
    $bbb
    [1] "apple"  "orange"
    
    $c
    [1] FALSE
    

    添加元素也很容易,比如:

    > x[['d']] <- c('one', 'two', 'three')  ##或者x$d <-  c('one', 'two', 'three')
    > x
    $`a`
    [1] 1 4 7
    
    $bbb
    [1] "apple"  "orange"
    
    $c
    [1] FALSE
    
    $d
    [1] "one"   "two"   "three"
    

    最后讲一下如何删除列表中的元素,可通过将相应元素赋值为NULL来删除元素,比如:

    > x$a <- NULL
    > str(x)
    List of 4
     $ bbb: chr [1:2] "apple" "orange"
     $ c  : logi FALSE
     $ d  : chr [1:3] "one" "two" "three"
    
    > x[['bbb']] <- NULL
    > str(x)
    List of 2
     $ c: logi FALSE
     $ d: chr [1:3] "one" "two" "three"
    

    有关列表的内容就讲到这。

    如若有遗漏,后期将会添加至本博客。


    感谢您的阅读!想了解更多有关R语言技巧,请关注我的微信公众号“R语言和Python学堂”,我将定期更新相关文章。

    相关文章

      网友评论

        本文标题:R语言初级教程(18): 列表

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