R中的向量

时间:2020-02-23 14:43:57  来源:igfitidea点击:

R中的向量是基本数据类型。
这是因为R编译器将所有标量(数字,整数等)和矩阵都视为向量的特殊情况。

从数据科学家的角度来看,您可以将向量视为跨一定时间间隔的观测值的集合,例如每天读取的温度,一天的总销售额等。
R提供了一些相关功能来从此角度处理向量。

在R中创建向量

向量的创建是使用c()函数完成的。

myvec <- c(3.1,45,1,2,80)

R语言为我们提供了动态计算值并将其分配给向量的功能。

> myvec2 <- c(3,5*8,(9/4))
> myvec2
[1]  3.00 40.00  2.25

我们可以使用先前创建的变量创建矢量。

> a <- 10
> b <-14.8
> c <-2
> myvec3 <- c(1,a,b,c)
> myvec3
[1]  1.0 10.0 14.8  2.0

我们还可以使用两个或者多个现有向量创建向量。

> bigvec <-c(myvec,myvec2)
> bigvec
[1]  3.10 45.00  1.00  2.00 80.00  3.00 40.00  2.25

向量可以具有相同数据类型(有时也称为模式)的任意数量的项。
注意:在R中创建向量时,我们无法混合数据类型。

R语言中向量的运算

向量与C相似,连续存储在内存中。
您可以对向量中的元素建立索引,提取向量的子集,对向量进行逐元素排序并执行常规数学运算。
我们将看一些清楚说明这些例子。

向量的索引元素

可以通过使用其索引以类似于访问数组元素的方式提取向量的元素。
以下代码段为您提供了一个示例。

> bigvec
[1]  3.10 45.00  1.00  2.00 80.00  3.00 40.00  2.25
> bigvec[2]
[1] 45
> avar <- bigvec[7]
> avar
[1] 40

当您尝试访问超出向量大小的元素时,R返回一个NA值。

用R语言获取向量的长度

通常,我们处理从互联网下载的数据集中的数据。
我们将整列读入向量变量,并且可能事先不知道尺寸。
在这些情况下,长度将是一个重要的参数,因此在处理数据时我们不会遇到NA值。
向量的长度可以使用length()函数知道。

> length(bigvec)
[1] 8

R中的子集向量

处理长向量时,有时有时仅需要从向量中提取感兴趣的元素。
我们可以通过使用R中的子集来做到这一点。

> bigvec
[1]  3.10 45.00  1.00  2.00 80.00  3.00 40.00  2.25

#Extract the last element of a vector - where index equals length
> bigvec[length(x=bigvec)]
[1] 2.25

#Extract the last but one element - subtract one from the length
> bigvec[length(x=bigvec)-1]
[1] 40

#Extract all elements except for the first element
> bigvec[-1]
[1] 45.00  1.00  2.00 80.00  3.00 40.00  2.25

#All elements except for the second one
> bigvec[-2]
[1]  3.10  1.00  2.00 80.00  3.00 40.00  2.25

#Elements from index 1 to index 3
> bigvec[1:3]
[1]  3.1 45.0  1.0

#Extract elements at specified indiced 1 and 5
> bigvec[c(1,5)]
[1]  3.1 80.0

在进一步的教程中,当我们使用真实数据集时,我们将更深入地研究子集。

产生序列

序列是R中使用序列运算符()生成的向量。
它们也可以使用seq函数生成。
这两种方法如下所示。

> 4:10
[1]  4  5  6  7  8  9 10

#From represents the starting range and to represents the ending range
#By is the increment factor.
> seq(from=1,to=20,by=2)
 [1]  1  3  5  7  9 11 13 15 17 19

#By value is negative for decreasing sequences
> seq(from=10,to=2,by=-1)
[1] 10  9  8  7  6  5  4  3  2

除了使用by参数之外,您还可以提供" length.out`参数来指示所需的长度,并获得从开始范围到结束范围的均匀间隔值。

> seq(from=3,to=20,length.out=25)
 [1]  3.000000  3.708333  4.416667  5.125000  5.833333  6.541667  7.250000  7.958333
 [9]  8.666667  9.375000 10.083333 10.791667 11.500000 12.208333 12.916667 13.625000
[17] 14.333333 15.041667 15.750000 16.458333 17.166667 17.875000 18.583333 19.291667
[25] 20.000000

可以使用R中的rep函数来重复矢量。
'rep'的用法如下所示。

> rep(x=1,times=5)
[1] 1 1 1 1 1

可以将x替换为向量,从而获得重复向量,如下所示。

> rep(x=bigvec, times=3)
 [1]  3.10 45.00  1.00  2.00 80.00  3.00 40.00  2.25  3.10 45.00  1.00  2.00 80.00
[14]  3.00 40.00  2.25  3.10 45.00  1.00  2.00 80.00  3.00 40.00  2.25

排序向量

可以使用sort()函数按照以下方式对向量进行升序或者降序排序。

#Sorts in ascending order by default.
#decreasing=FALSE is an optional parameter.
> sort(bigvec, decreasing = FALSE)
[1]  1.00  2.00  2.25  3.00  3.10 40.00 45.00 80.00

#Sort in descending order
> sort(bigvec, decreasing=TRUE)
[1] 80.00 45.00 40.00  3.10  3.00  2.25  2.00  1.00

向量算术

在较早的R讨论中,向量算术已包含在运算符中。
向量算术的重要一点是循环。
当指定的向量运算具有两个长度不匹配的向量作为操作数时,R会简单地循环使用较短向量的值,直到达到长度为止。

> a <-c(0,1)
> b <-c(1,2,3,4,5)

#The new value of a after recycling will be (0,1,0,1,0) which gets added to b.
> a+b
[1] 1 3 3 5 5