继续学R:List(列表) Part 1, 创建列表&命名&访问

粗略了浏览了一些各种R相关的文章,才惊觉R含金量最高的部分是统计分析部分,那部分我是一点不懂啊,所以真怀疑我能否坚持下去,姑且走着瞧吧,哪天写不下去了烂尾了,那也是意料之中的事情。

之前学了多元素向量,分三个小节学习了多元素向量的创建、访问以及操作。这篇文章我们来了解一下另外一种复杂的数据类型List/列表

创建列表

与多元素向量/Vertors不同,list可以同时容纳多种类型的元素。我们可以使用list()来创建list,示例如下:

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

通过示例可见,不同于vertors的类型取决于其内元素的类型,而list有自己的类型list;另外不同于vertors只能包含相同类型的原子向量(不同类型会进行转换), list可以同时容纳多种类型的元素

命名列表元素

我们可以通过names()来给列表元素命名。示例如下:

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
names(mylist)<-c('char', 'number', 'vertors', 'complex')
print(mylist)

访问列表元素

下标访问

通过下标访问,和通过下标访问多元素向量类似,例如:

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

命名访问

我们之前给list元素创建了名字,那么名字仅仅为了好看吗?答案是否定的,名字还可以用访问列表元素哦,例如:

mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
names(mylist)<-c('char', 'number', 'vertors', 'complex')
print(mylist$vertors)
print(mylist$number)


是不是很神奇?

vertors 命名访问

说到列表的命名访问,我不禁有一个疑问,vertors是否可以这样操作呢?光想没用,试试看:

v<-c(1, 2, 3, 4)
names(v)<-c('a', 'b', 'c', 'd')
print(v)
print(v['b'])


貌似可行呢?

重复命名

写到这,不禁又想一个问题,既然是对元素命名,那么命名应该是独一无二的,那么如果我们传入重复的命名会是如何呢?

v<-c(1, 2, 3, 4)
names(v)<-c('a', 'c', 'c', 'd')
mylist<-list('a', 5.2, c(7, 8, 9), 3+4i)
names(mylist)<-c('char', 'char', 'vertors', 'complex')

竟然都没有执行出错,那么访问命名元素时指向的到底是哪个元素呢?这个当课后题留给大家吧。说实话,可以给不同元素起相同命名,貌似有点坑啊。😳


今天就水到这里了,下期继续水。

相关链接

H2
H3
H4
3 columns
2 columns
1 column
2 Comments