最简单的功能
简单运算
一次性地处理多个数值
+
-
*
/
^
()
sqrt
(-2)
log(x=243,base=3)
exp(x=3)
2.134566666e+12
2.5333e-07
计算中自动省略的信息,仍然保留
无穷大或零
<-
=
覆盖
多个任务执行相同运算或者进行多次比较,例如调整一个数据集的测量方法时
处理多维问题的基本模块
关于单变量的测量值或观测值的集合,例如100个人每天喝茶的数量
c(1,41,3,77)
向量分类
序列、重复、排序和长度
等差递增或递减的向量
seq(from=3,to=27,by=3)
seq(from=3,to=27,length.out=40)
rep(x=1,times=4)
rep(x<-c(4,6,8,9),each=2),not"c=(4,6,8,9)"
rep(x<-c(7,6,5,4,3),times=3,each=2)执行顺序
each、times均未知的情形
x12<-(rep(x<-c(7,6,5,4,3),times=3,each=2))
rep<-(x12,each=9)
sort(X<-C(5,9,78,-88,99,7,35),decreasing=FALSE)
sort(X<-C(5,9,78,-88,99,7,35),decreasing=TRUE)
length(x=c(3,9,88,74))
length(5:88)
索引,子集
v5(11),v5[11]
1:v5
1:length(v5)
v6<-v5[-6]
算术运算的结果,可以替代很多数字存在的情况
中括号
v7<-v5[-2+1]
v8<-v5[-length(v5)]
v9<-v5[c(1,4,7)]
v10<-v5[1:4]
v10<-v5[4:2]
在一个索引向量中不能混合使用正负指标
v10[1]<-77
> vv5<-vv4[1,length(vv4)]
Error in vv4[1, length(vv4)] : 量度数目不对
> vv5<-c(vv4[1,length(vv4)])
Error in vv4[1, length(vv4)] : 量度数目不对
> vv5<-c(vv4[1],vv4[length(vv4)])
> vv5
[1] 3.000000 2.166667
> seq(vv7)
[1] 1 2 3 4 5 6 7 8 9 10 11 12
> sort(vv8<-vv7,decreasing=FALSE)
[1] -33.000000 -33.000000 -5.100000 -5.100000 2.000000 2.000000
[7] 2.166667 3.000000 3.750000 4.500000 5.250000 6.000000
> vv8<-sort(vv8<-vv7,decreasing=FALSE)
> vv8
[1] -33.000000 -33.000000 -5.100000 -5.100000 2.000000 2.000000
[7] 2.166667 3.000000 3.750000 4.500000 5.250000 6.000000
> vv9<-c(vv8[14:1])
> vv9
[1] NA NA 6.000000 5.250000 4.500000 3.750000
[7] 3.000000 2.166667 2.000000 2.000000 -5.100000 -5.100000
[13] -33.000000 -33.000000
> vv9
[1] NA NA 6.000000 5.250000 4.500000 3.750000
[7] 3.000000 2.166667 2.000000 2.000000 -5.100000 -5.100000
[13] -33.000000 -33.000000
> vv9<-vv9
> vv9
[1] NA NA 6.000000 5.250000 4.500000 3.750000
[7] 3.000000 2.166667 2.000000 2.000000 -5.100000 -5.100000
[13] -33.000000 -33.000000
> vv9[-1]
[1] NA 6.000000 5.250000 4.500000 3.750000 3.000000
[7] 2.166667 2.000000 2.000000 -5.100000 -5.100000 -33.000000
[13] -33.000000
> vv9[-1]
[1] NA 6.000000 5.250000 4.500000 3.750000 3.000000
[7] 2.166667 2.000000 2.000000 -5.100000 -5.100000 -33.000000
[13] -33.000000
> vv9<-vv9[-1]
> vv9
[1] NA 6.000000 5.250000 4.500000 3.750000 3.000000
[7] 2.166667 2.000000 2.000000 -5.100000 -5.100000 -33.000000
[13] -33.000000
> vv9<-vv9[-1]
> vv9
[1] 6.000000 5.250000 4.500000 3.750000 3.000000 2.166667
[7] 2.000000 2.000000 -5.100000 -5.100000 -33.000000 -33.000000
> vv8[14:1]
[1] NA NA 6.000000 5.250000 4.500000 3.750000
[7] 3.000000 2.166667 2.000000 2.000000 -5.100000 -5.100000
[13] -33.000000 -33.000000
> vv8[12:1]
[1] 6.000000 5.250000 4.500000 3.750000 3.000000 2.166667
[7] 2.000000 2.000000 -5.100000 -5.100000 -33.000000 -33.000000
> vv9<-c(vv8[length(vv8):1)
错误: 意外的')' in "vv9<-c(vv8[length(vv8):1)"
> vv9<-c(vv8[length(vv8):1])
> vv9
[1] 6.000000 5.250000 4.500000 3.750000 3.000000 2.166667
[7] 2.000000 2.000000 -5.100000 -5.100000 -33.000000 -33.000000
> vv10<-c(vv8[length(vv8):1])
> vv10
[1] 6.000000 5.250000 4.500000 3.750000 3.000000 2.166667
[7] 2.000000 2.000000 -5.100000 -5.100000 -33.000000 -33.000000
不是14个数值,而是12个。
如何一次性删除两个值?
> vv14<-vv12[-c(1,length(vv12)]
错误: 意外的']' in "vv14<-vv12[-c(1,length(vv12)]"
> vv14<-vv12[c(-1,-length(vv12))]
> vv14
[1] 4.50 5.25 6.00 98.00 97.00 96.00 2.00 -5.10
> vv14<-vv12[-c(1,length(vv12))]
> vv14
[1] 4.50 5.25 6.00 98.00 97.00 96.00 2.00 -5.10
> vv15<-vv14[-c(1,length(vv14))]
> vv15
[1] 5.25 6.00 98.00 97.00 96.00 2.00
以上便是对如何一次性删除两个及以上数值的回答。
同样的道理,一次性也可以替换两个及以上的数值,例如vv15[c(1,2)]<-c(78,99)
> vv15[c(1,2)]<-c(78,99)
> vv15
[1] 78 99 98 97 96 2
注意,如下
> vv14[c(1,3,5,7)]<-c(99,-99)
> vv14
[1] 99.00 5.25 -99.00 98.00 99.00 96.00 -99.00 -5.10
这种情况下,长度为2的向量改写了4个特定元素,这是我们所熟悉的循环方法。此种情况下向量长度必须可以均匀划分被改写元素的数量,否则会出现警告(但并不会报错)。
R软件中,向量非常有用是因为一次性处理多个元素是的速度快且效率高。这种面向向量、向量化或者针对元素的操作是R语言的一个关键特征。
vv12
[1] 99.00 4.50 5.25 6.00 98.00 97.00 96.00 2.00 -5.10 95.00
> vv12-2
[1] 97.00 2.50 3.25 4.00 96.00 95.00 94.00 0.00 -7.10 93.00
使用不同长度的向量
bar<-c(1,-1)
vv12*bar
警告与报错的不同
可以使用单值向量,来对任意长度向量中的所有值进行重复操作 ,例如,希望用常数来调整或转换一系列测量指标。
面向向量的操作
> sum(vv12)
[1] 497.65
> prod(vv12)
[1] -1.240941e+13
向量函数,比迭代运行(如循环)更快且效率更高。
大多数R函数用于特定的数据结构,以确保代码的整洁以及性能优化。
向量元素的个数
> vvv1<-rep(c(2,0.5,1),times=3)
> vv1
[1] 3.00 3.75 4.50 5.25 6.00
> vvv1
[1] 2.0 0.5 1.0 2.0 0.5 1.0 2.0 0.5 1.0
> vvv2<-vvv1+c(-2,1.5,-1)
> vvv2
[1] 0 2 0 0 2 0 0 2 0
> length(vvv2)
[1] 9
> vvv2<-vvv1*c(0,0,0)
> vvv2
[1] 0 0 0 0 0 0 0 0 0
> length(vvv2)
[1] 9
> vvv2<-vvv1/c(2,0.5,1)
> vvv2
[1] 1 1 1 1 1 1 1 1 1
> length(vvv2)
[1] 9
> vvv8[c((length(vvv8)/2+1):length(vvv8))]*vvv6[2]
[1] 4 8 12
> vvv8[c(length(vvv8)/2+1:length(vvv8))]*vvv6[2]
[1] 4 8 12 NA NA NA
foo <- rep(x=c(2,4,6),times=2)*rep(x=c(1,2),each=3)
最优解法