在上一篇文章中,我们学习了列表的创建、列表元素命名以及按照下标以及命名等方式访问列表。在上一篇文章的结尾,我们还留了一个实践题,给列表元素赋予相同的命名会是什么效果?这个大家测试了没有啊?
这节我们来继续学习列表。
列表的操作
追加元素
首先,我们来了解一下追加元素
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
好了,关于列表,我们就水到这里了,下节再继续水别的内容。说实话,有点枯燥呢,不过打游戏不枯燥,但是那样我们也学不到啥东西啊。