在之前的两篇文章中,我们学习了多元素向量的创建以及多元素向量的访问,通过这两篇文章我们已经对多元素向量有了个基本的了解,接下来我们一起来看看多元素向量都如何操作。
算术操作
相同长度的两组多元素向量,可以进行加、减、乘、除操作。
v1<-c(1,2,3,4)
v2<-c(5,6,7,8)
print(v1+v2); print(v1-v2); print(v1*v2); print(v1/v2);
通过结果我们不难看出,加、减、乘、除就是将对应位置的元素进行相应的操作。
到这不难想出几个问题:
- 是否所有类型多元素向量都支持如此操作?
- 不同类型的多元素向量是否可以如此操作?
- 不同长度的多元素向量是否可以如此操作?
经过测试,问题1的答案是并非所有类型多元素向量都支持算术操作,数字类型的才可以; 问题2的答案是不同数字类型的之间可以操作。
对于这两个问题其实不难得出答案,因为既然算术操作就是将对应位置的元素进行操作,那么只有两个原子向量之间支持对应的算术操作才可以。比如在Python中我们可以使用:
print('a'+'b')
而在R中,我试着执行:
print('a'+'b')
所以在R中,对两个字符型数据进行加运算是行不通的,当然对于字符型多元素向量更是行不通喽。
向量元素循环利用(Vector Element Recycling)
在算术操作中,我们提出了三个问题,但是解决了两个,那么剩下的问题呢?这里我们就来说一下不同长度的多元素向量进行算术操作时如何处理,比如这段代码:
v1<-c(1,2,3,4)
v2<-c(5,6)
print(v1+v2)
答案是R把v2的元素循环利用,扩展到与v1相同长度。
很多中文教程把这个翻译成向量元素回收/Vector Element Recycling,但是我个人认为向量元素循环利用更贴切,不过翻译成啥无所谓了,总之就是这么回事啦。
但是问题又来了,以以下代码为例:
v1<-c(1,2,3,4)
v2<-c(5,6,7)
print(v1+v2)
这时候该如何把v2扩展成和v1相同长度呢?扩展成5,6,7,5,6,7
又比v1长了,难道再去扩展v1?想想就很纠结。还是直接试一下吧:
答案是把短的扩展到和长的相同长度为止,然后给出个警告⚠
多元素向量排序
给多元素向量排序是很简单的事情,直接调用sort()
函数即可,例如:
v1<-c(1,2,3,4,-10,200)
print(sort(v1))
当然了,还支持排序方向(递增,递减)
v1<-c(1,2,3,4,-10,200)
print(sort(v1, decreasing = TRUE))
除了数字类型,还支持字符以及其它类型,这里就不一一演示啦,感兴趣的朋友自己试试吧。
至此,多元素向量就了解的差不多了,下节争取接触新内容啦。今天就水到这里啦。