R语言教程(二)

R语言教程(二)

1.R语言的基本运算量——向量

1.1 什么是向量

向量是一组“数”的有序集合。这不是教数学,只要把握两点就好
1.向量由一组“数”组成,“数”可以是一个也可以是多个;
2.这组“数”是有序的。

举个具体的例子:
(0,1,2)就是一个向量,它由0,1,2这三个“数”组成,并且这个三个“数”是有序的,也就是说(0,1,2)和(1,2,0)是两个不同向量。

在R语言中,这个“数”的概念比较广泛,可以数学上实数、复数,也可以是逻辑值,甚至是字符串。不过在以后的讨论中,很少会涉及到字符串,因为我觉得用的不多,并且我相信当大家掌握了其他的向量用法,字符串的使用也会融会贯通的。

PS:R语言对复数的表示有一个点需要注意,就是像6+i这种要表示为6+1i,即复数单位前的系数不可省略。这个影响有时还是很大的,比如sqrt(-17)是非法的,因为负数是无法开平方的,但是sqrt(-17+0i)是合法的,有一些数学基础的人应该很容易看出其中的区别。

1.2 如何创建一个向量

R语言中创建一个向量的方法实在是太多了,这里只介绍9种基础的方法,实践中向量的创建大部分是它们的组合。

形式1:基本式
这里写图片描述
这是利用c()函数最基本的形式,x即表示你创建的向量(1,2,3)。这里有两点需要说明:
1.R语言中的赋值使用”<-“这个符合,虽然我们更熟悉“=”也是可以的,但很多人都用”<-“,所以请大家也继承这个习惯。
2.R语言是大小写敏感的,c()与C()对于R语言来说是不同的两个函数。

形式2:连续式
这里写图片描述
应该很容易看懂,指定起止数,按间隔为1或者-1生成向量。这种方式可以使用c()函数也可忽略。
ps:如果输入a<-0.1:3,向量a是什么样的呢?大家可以自己试试,体会其中的含义。

形式3:连续式,可以指定间隔
这里写图片描述
这里使用了seq函数,应该也很好理解,从2开始,到3为止,以间隔0.2生成向量。

形式4:连续式,指定起始、间隔和长度
这里写图片描述
这个也很好理解吧,从1开始,以间隔为1,生成长度为5的向量。
ps:seq的详细用法,大家可以使用help查询一下,方法上一篇讲过了。千万不要懒,官方文档永远是最好的帮助。

形式5:嵌套式
这里写图片描述
这实际上是利用一个已知向量生成新的向量的方法。向量e是利用向量d和“-1”组成的。

形式6:重复式
这里写图片描述
重复式使用了rep函数。向量g其实等价于c(f,f,f),但是如果要重复100次,rep(f,100)显然比c(f,f……)方便许多。向量h是将向量f中的每个元素重复3次形成的。

形式7:切片式
这里写图片描述
向量k是一个很长的向量,有时我们只需要向量k的一部分。这时我们可以使用向量index对向量k进行切片。切片的方法是使用“[]”。如图,向量m就是我使用向量k的第一个到第四个元素生成的新向量。向量index不需要是1:4这种连续的形式,index<-c(1,10,50)也是正确的。
对于有一定编程基础的人来说,向量index可以理解为向量k的下标,不过,R语言的下标是从1开始,而不是0开始。

形式8:切片式,使用负数下标
这里写图片描述
可以看出,这种方法实际上是删除向量k的第一到第四个元素。

形式9:赋值式
这里写图片描述
有时你可能需要改变向量中部分值,此时可以使用这种赋值的形式。

ps:向量的创建还有一些其他的方法,大家可以上网找找。

1.3 向量的运算

在R语言中,运算都是以向量为基础的。比如我们先前提到的3*5,实际上,在计算时应理解为c(3)*c(5)。其结果15也是一个向量,即c(15)。

R语言向量的运算规则简单来说分三步:
1.将较短的向量补全,使运算符两侧的向量长度相等;
2.补全的规则是短向量重复,使其长度大于等于长向量,再按长向量的长度切片;
3.将两个向量中位置对应的两个元素,按运算符运算。

以上的说法很抽象,举个简单例子。
这里写图片描述
首先,3应理解为c(3),即图中的计算应理解为c(3)*c(1,2,3)。显然,c(3)的长度是1,而c(1,2,3)的长度是3,c(3)需要将长度补全为3,再进行计算。根据补全的规则,c(3)重复为c(3,3,3)。长度相等后,两者按位相乘,c(3*1,3*2,3*3),即c(3,6,9)。

再看一个例子。
这里写图片描述
看到警告信息了吧,两者长度不是整数倍。这种情况的运算过程中多了一个切片的动作,首先c(2,3)由于长度不够进行补全,为c(2,3,2,3),长度超过了3,就按长度3进行切片,变为c(2,3,2)。然后,c(2,3,2)*c(4,5,6)得到结果c(8,15,12)。

ps:实践中如果遇到这种长度不是整数倍的情况,要想想是不是哪里弄错了。

以上都是四则运算的例子,其实函数运算也可以作用于向量。比如:
这里写图片描述
sqrt是开方运算,上面的运算相当于c(sqrt(2),sqrt(4),sqrt(8))。

1.4 向量的类型和类型转换

前文提到,R语言的向量可以由实数、复数甚至字符串组成。那么,如何知道一个向量是由什么组成的呢?R语言提供了一个函数:mode()。

例如:
这里写图片描述
mode函数会返回一个字符串表示向量的类型,如图所示向量a由复数组成,向量b由实数组成。

R语言同样提供了方法将不同类型的向量进行转换。比如想要将向量b转换为一个由字符串组成的向量c,我们可以如下操作:
这里写图片描述
as对象还有许多其他的方法用于类型转换,请自行help。

结束语

掌握了以上这些,再配合R语言自带的函数,一些复杂的运算也可以了。不过目前这只是一些最基本的内容,在后面的脚本设计里,还有很多其他的东西要介绍。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值