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
, 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语言和Python学堂
链接:https://www.jianshu.com/p/4475649287b4
共同學(xué)習(xí),寫下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章