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): 列表

    在这篇博客,你将学习如何在R中使用列表(list)。之前我们提过,列表可包含不同类型的元素,比如数字、字符串、向量...

  • R 语言-列表

    列表顾名思义就是用来存储很多内容的一个集合,在其它编程语言中,列表一般和数组是等同的,但是在 R 语言中,列表却是...

  • R语言 列表

    列表是R语言对象,它包含不同类型的元素,如数字,字符串,向量和其中的另一个列表。 列表还可以包含矩阵或函数作为其元...

  • R语言——列表

    前一段工作太忙了,终于又有时间来继续学习了 列表就是一些对象(或成分,component)的有序集合。列表允许整合...

  • R语言-列表

    生成列表list函数 取一个子集 取子集的子集 转换为列表及解除列表 列表的转换

  • 学习小组DAY4笔记——Jason

    今天可以学R语言了啊啊啊 先上思维导图 R语言基本操作 显示列表文件dir()list.files()显示列表文件...

  • R语言列表基础

    列表(list) : Java语言开发python : 万物皆对象 【语法太灵活】【数据挖掘】R数据类型 理解 对...

  • R语言列表2021.1.28

    列表 列表顾名思义就是用来存储很多内容的一个集合,在其他编程语言中,列表一般和数组是等同的,但是在R语言中,列表却...

  • R语言初级教程(16): 数组

    在R中,向量(vector)是一维数据,矩阵(matrix)是二维数据。数组(array)是向量和矩阵的推广,是多...

  • R语言初级教程(23): 函数

    函数用于在逻辑上将我们的代码分解成更简单的部分,这些部分易于维护和理解。 1. 语法 在R中创建自己的函数非常简单...

网友评论

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

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