继续学R:List(列表) Part 2, 列表的操作

上一篇文章中,我们学习了列表的创建、列表元素命名以及按照下标以及命名等方式访问列表。在上一篇文章的结尾,我们还留了一个实践题,给列表元素赋予相同的命名会是什么效果?这个大家测试了没有啊?

这节我们来继续学习列表。

列表的操作

追加元素

首先,我们来了解一下追加元素

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[5]<-"hahaha"
print(mylist)


我们成功地在末尾追加了一个新元素

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[8]<-"hahaha"
print(mylist)
print(length(mylist))


通过这个例子,我们可以看出,可以在末尾之后的任意位置追加元素,中间元素填空值。

更新元素

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[2]<-"hahaha"
print(mylist)


所谓的更新元素就是给元素赋个新值,这个倒是非常好理解。

删除元素

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[4]<-NULL
print(mylist)


咦,第四个元素不见了,果然被删除鸟。

R - Lists,这篇文章中说:

We can add and delete elements only at the end of a list.

果真如此吗?其实添加元素一节我们已经证实了,可以在list末尾之后任意位置增加,那么来试试删除吧。

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[1]<-NULL
print(mylist)


也就是说除了删除尾部元素,我们还可以删除头部元素。

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[2]<-NULL
print(mylist)


看这个结果,貌似我们可以删除任意位置的元素啊。

不过有些搞不懂,下边例子中产生的NULL元素,和赋值NULL的元素有什么区别了,为什么下边例子中的空元素没有被清理掉呢?

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist[8]<-"hahaha"
print(mylist)
print(length(mylist))

合并列表

合并列表就是把两个列表合二为一了,使用c()函数,这个c()函数真是万能啊。

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
mylist2<-list("hahaha", "oflyhigh", "steemit")
print(c(mylist, mylist2))

这个好像也没啥好说的。

将列表转换成向量

有时候为了对列表里的元素进行进一步的操作,我们需要将列表转换成向量,使用unlist()函数就可以啦。

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
print(unlist(mylist))


是不是很简单,需要注意的是,列表支持同时存储不同类型元素,而多元素向量只能存储一种类型,那么当包含多种类型元素的列表转换成多元素向量,类型是如何变化的呢?

这个可以参考继续学R:Vector(向量) Part 1, 多元素向量创建&类型,我总结的规律是:

raw > logical > integer >numeric >complex > character


好了,关于列表,我们就水到这里了,下节再继续水别的内容。说实话,有点枯燥呢,不过打游戏不枯燥,但是那样我们也学不到啥东西啊。

相关链接

H2
H3
H4
3 columns
2 columns
1 column
1 Comment