绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
R语言初级教程(18): 列表
2020-06-17 10:39:17

在这篇博客,你将学习如何在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 3
 $ 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语言
创建时间:2020-06-15 11:46:51
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的工具。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 小雨滴
    专家
戳我,来吐槽~