R中的向量
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