R提供了十分灵活的访问向量元素和向量子集的功能。
某一个元素只要用x[i]的格式访问,其中x是一个向量名,或一个取向量值的表达式,如:
> x<-c(1,4,7)
> x[2]
[1] 4
> (c(1,4,7)+5)[2]
[1] 9
可以单独改变一个元素的值,如:
> x[2]<-125
> x
[1] 1 125 7
> x[c(1,3)]<-c(144,169)
> x
[1] 144 125 169
(1)逻辑向量
v为和x等长的逻辑向量,x[v]表示取出所有v为真值得元素,如:
> x<-c(1,4,7)
> x<5
[1] TRUE TRUE FALSE
> x[x<5]
[1] 1 4
可以将向量中缺失数据赋值为0,如:
> z<-c(-1,1:3,NA)
> z[is.na(z)]<-0
> z
[1] -1 1 2 3 0
也可以将向量中非缺失数据赋给另一个向量,如:
> z<-c(-1,1:3,NA)
> y<-z[!is.na(z)]
> y
[1] -1 1 2 3
或做相应的运算:
> (z+1)[(!is.na(z))&z>0]->x
> x
[1] 2 3 4
改变部分元素值的技术与逻辑值下标方法结合可以定义向量的分段函数,例如,要定义:
可以用:
> y<-numeric(length(x))
> y
[1] 0 0 0
> y[x<0]<-1-x[x<0]
> y[x>=0]<-1+x[x>=0]
> y
[1] 3 4 5
其中,numeric()函数是产生数值型向量。
(2)下标的正整数运算
v为一个向量,下标取值在1到length(v)之间,取值允许重复,例如:
> v<-10:20
> v[c(1,3,5,9)]
[1] 10 12 14 18
> v[1:5]
[1] 10 11 12 13 14
> v[c(1,2,3,2,1)]
[1] 10 11 12 11 10
>c("a","b","c")[rep(c(2,1,3),times=3)]
[1] "b" "a""c" "b" "a" "c" "b""a" "c"
(3)下标的负整数运算
v为一个向量,下标取值在-length(v)到-1之间,例如:
> v[-(1:5)]
[1] 15 16 17 18 19 20
表示扣除相应的元素。
(4)取字符型值得下标向量
在定义向量时可以给元素加上名字,如:> ages<-c(Li=33,Zhang=29,Liu=18)
> ages
LiZhang Liu
33 29 18
这样定义的向量可以用通常的办法访问,另外还可以用元素名字来访问元素或元素子集,如:
> ages["Zhang"]
Zhang
29
向量元素名可以后加,如:
> fruit<-c(5,10,1,20)
>names(fruit)<-c("orange","banana","apple","peach")
> fruit
orange banana apple peach
10 1 20
参考:《统计建模与R软件》 薛毅 陈立萍 编著 清华大学出版社