在这篇博客,你将学习如何在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
, b
和c
是各元素的名称(标签),通过它们可以很方便地访问元素。然而,我们也可以不要标签,这种情况下,默认用数字来做索引。
> 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学堂”,我将定期更新相关文章。
网友评论