R(02):第二章:2.2数字、字符与向量(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/genome_denovo/article/details/81951455

《统计建模与R软件》薛毅

第2章 R软件的使用

2.2 数字、字符与向量

总结:产生等差数列可用(:)生成;seq(from=value1, to=value2, by=value3)产生等间隔函数;rep(x, times=3)产生重复函数;记住逻辑运算符(<, <=, >, >=, ==, !=)及符合逻辑运算的逻辑表达式(&, |, !与或非);NA表示缺失数据,判断数据类型的四个函数(is.na, is.nan, is.finite, is.infinite,是否是缺失,是否是非缺失,是否有限,是否无穷);字符型向量可用paste()函数对字符进行连接,sep参数表示字符连接符,collapse表示向量连接符;通过向量下标可以取向量的一个或多个分量,或向量分量的重新赋值,但要记住R的向量下标从1开始,可通过逻辑向量的TRUE与FALSE取到原向量的结果,符合判断条件即为TRUE时取出;下标的正整数运算则取向量的相应分量;负整数运算扣除相应分量,留下其余分量;字符型值的下标向量可通过元素名称取得。

2.2.2 产生有规律的序列

1. 等差数列

a:b表示从a开始,逐项加1(或减1),知道b为止,如x<- 1:30表示向量x=(1, 2, …, 30),x<- 30:1表示向量x=(30, 39, …, 1)。当a为实数,b为整数时,向量a:b时实数,其间隔差1,而当a为整数,b为实数时,a:b表示其间隔差1的整数向量。如:
> 2.312:6
[1] 2.312 3.312 4.312 5.312
> 4:7.6
[1] 4 5 6 7
注意:x<- 2*1:15并不是表示2到15,而是表示向量x=(2, 4, …, 30),即x<- 2*(1:15),也就是等差运算优于乘法运算。同理,1:n-1并不是表示1到n-1,而是表示向量1:n的各个分量分别减去1。若需要表示1到n-1,则需要对n-1加括号,等差运算优于加减法运算。例如:(这里提到计算的优先级)
> n <- 5
> 1:n-1 #各个分量都减去1
[1] 0 1 2 3 4
> 1:(n-1) #表示1:4
[1] 1 2 3 4

2. 等间隔函数

seq()函数能够产生等距间隔的数列,其基本形式为:
seq(from=value1, to=value2, by=value3)
即从value1开始,到value3结束,中间的间隔为value3。例如:
> s1 <- seq(-5, 5, by=.2)
> s1
[1] -5.0 -4.8 -4.6 -4.4 -4.2 -4.0 -3.8 -3.6 -3.4 -3.2 -3.0
[12] -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8
[23] -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4
[34] 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6
[45] 3.8 4.0 4.2 4.4 4.6 4.8 5.0
表示从-5到5间距为0.2
seq函数的另外一种表示形式为:
seq(length=value2, from=value1, by=value3)
即从value1开始,间隔为value3,其向量的长度为value2。例如:
> s2 <- seq(length=51, from=-5, by=.2)
> s2
[1] -5.0 -4.8 -4.6 -4.4 -4.2 -4.0 -3.8 -3.6 -3.4 -3.2 -3.0
[12] -2.8 -2.6 -2.4 -2.2 -2.0 -1.8 -1.6 -1.4 -1.2 -1.0 -0.8
[23] -0.6 -0.4 -0.2 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4
[34] 1.6 1.8 2.0 2.2 2.4 2.6 2.8 3.0 3.2 3.4 3.6
[45] 3.8 4.0 4.2 4.4 4.6 4.8 5.0

3. 重复函数

rep()是重复函数,它可以将某一向量重复若干次再放入新的变量中,例如:
> x<- 1:30
> s <- rep(x, times=3)
> s
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[19] 19 20 21 22 23 24 25 26 27 28 29 30 1 2 3 4 5 6
[37] 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
[55] 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12
[73] 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
即将变量x重复3倍,放在变量s中,如:
> x <- c(1, 4, 6.25); x
[1] 1.00 4.00 6.25
> s <- rep(x, times=3); s
[1] 1.00 4.00 6.25 1.00 4.00 6.25 1.00 4.00 6.25

2.2.3 逻辑向量

当逻辑运算为真时,返回值为TRUE;当逻辑运算为假时,返回值为FALSE。例如:
> x <- 1:7
> l <- x>3
> l
[1] FALSE FALSE FALSE TRUE TRUE TRUE TRUE
逻辑运算符:
<小于, <=小于等于, >大于, >=大于等于, ==等于, !=不等于。
如果c1和c2是两个逻辑表达式:
c1 & c2(c1与c2), c1 | c2(c1或c2), !c1(非c1)
逻辑变量可进行赋值
> z <- c(TRUE, FALSE, T, F)
> z
[1] TRUE FALSE TRUE FALSE
其中T是TRUE的简写,F是FALSE的简写
判断一个逻辑向量是否都为真值的函数是all,判断是否其中有真值的函数是any,例如:
> c(1,2,3,4,5,6) > 3
[1] FALSE FALSE FALSE TRUE TRUE TRUE
> all( c(1,2,3,4,5,6) > 3 )
[1] FALSE
> any( c(1,2,3,4,5,6) > 3 )
[1] TRUE

2.2.4 缺失数据

用NA表示某处的数据缺失,例如:
> z <- c(1:3, NA); z
[1] 1 2 3 NA
函数is.na()是检测缺失数据的函数,返回TRUE此数据是缺失数据,返回FALSE则不是缺失数据;例如:
> ind <- is.na(z); ind
[1] FALSE FALSE FALSE TRUE
如果将缺失数据改为0,则利用如下方法:
> z[is.na(z)] <- 0; z
[1] 1 2 3 0
> z[!is.na(z)]; z#取出z内非缺失值
类似的函数有:
is.nan() 检测数据是否不确定,TRUE为不确定,FALSE为确定
is.finite() 检测数据是否有限,TRUE为有限,FALSE为无穷
is.infinite() 检测数据是否无穷,TRUE为无穷,FALSE为有限
> x<-c(0/1, 0/0, 1/0, NA);x
[1] 0 NaN Inf NA
> is.nan(x)
[1] FALSE TRUE FALSE FALSE
> is.finite(x)
[1] TRUE FALSE FALSE FALSE
> is.infinite(x)
[1] FALSE FALSE TRUE FALSE
> is.na(x)
[1] FALSE TRUE FALSE TRUE
不确定数据是缺失数据,但缺失数据是确定的

2.2.5 字符型向量

向量的元素可以取字符串值,例如:
> y <- c("er","sdf","eir",'jk','dim')
> y
[1] "er" "sdf" "eir" "jk" "dim"
单引号和双引号作用相同
paste函数将自变量连接成一个字符串,默认用空格分开
> paste('my','job')
[1] "my job"
但paste()函数,也可将两个向量连接,连接方式是,第一个向量的分量和第二个向量的分量连接,
> x <- c('ss','jes')
> y <- c("er","sdf","eir","jk",'dim')
> paste(x, y)
[1] "ss er" "jes sdf" "ss eir" "jes jk" "ss dim"
> w <- c('a','b')
> paste(x, y, w)
[1] "ss er a" "jes sdf b" "ss eir a" "jes jk b" "ss dim a"
连接的自变量可以是向量,这时各对应元素连接起来,长度不相同时较短的向量被重复使用,自变量可以是数值向量,连接时自动转换成适当的字符串表示,paste函数的sep参数表示设定连接的分隔符,而sep=”表示不用分隔符,两个字符直接连接,例如:
> labs <- paste('X', 1:6, sep=''); labs
[1] "X1" "X2" "X3" "X4" "X5" "X6"
> labs <- paste('X', 1:6); labs
[1] "X 1" "X 2" "X 3" "X 4" "X 5" "X 6"
> paste(c('a','b'), collapse='.') #collapse表示输出的a,b用“.”进行连接
[1] "a.b"

2.2.6 复数向量

函数complex()

2.2.7 向量下标运算 R语言中向量的下标是从1开始的

向量中的某一个元素可用x[i]的格式进行访问,其中x是一个向量名,或一个取向量值的表达式,例如:
> x <- c(1,4,7)
> x[2]
[1] 4
> (c(1,3,5)+5)[2]
[1] 8
同时通过向量的下标,也可以单独的改变一个向量当中某个分量的值
> x[2] <- 125
> x
[1] 1 125 7
> x[c(1,3)]
[1] 1 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
通过向量可做相应的运算
> y <- c(-1, 1, 2, 3, NA)
> (y+1)[(!is.na(y)) & y>0] -> x # y+1表示y向量的各个分量加1,(!is.na(y)),y向量内取非NA值,&,同时,y>0取y内大于0的数
> x
[1] 2 3 4

改变部分元素值的技术与逻辑值下标方法结合可以定义向量的分段函数,例如:
y = 1-x, x<0;y = 1+x, x>=0
可以用:
> x <- c(-2,3,0,-4,1); x
[1] -2 3 0 -4 1
> y <- numeric(length(x)); y
[1] 0 0 0 0 0
> y[x<0] <- 1 - x[x<0]
> y[x>=0] <- 1 + x[x>=0]
> y
[1] 3 4 1 5 2
> x
[1] -2 3 0 -4 1
其中,numeric()函数的功能是产生数值型向量

2. 下标的正整数运算

v为一个向量,下标取值在1到length(v)之间,取值允许重复,例如:
> v <- 10:20
> v[c(1,3,5,7)]
[1] 10 12 14 16
> v[rep(c(2,1,3), times=3)]
[1] 11 10 12 11 10 12 11 10 12

3. 下标的负整数运算

v为一个向量,下标取值在-length(v)到-1之间,例如:
> v[-(1:5)]
[1] 15 16 17 18 19 20
> v
[1] 10 11 12 13 14 15 16 17 18 19 20
这里表示扣除相应的分量之后显示剩下的分量,v[-1]表示扣除v中的第一个分量,这里与python有所不同的是,python的负数取分量是逆向切片取值,所以不要混淆

4. 取字符型的值的下标向量

在定义向量时可以给元素加上名字,例如:
> ages <- c(Li=33, Zhang=29, Liu=18)
> ages
Li Zhang Liu
33 29 18
可以用元素名字来访问元素或元素子集
> ages['Zhang'] #作用有点相当于python当中的字典
Zhang
29
向量元素名可在定义向量后加入,例如:
> fruit_price <- c(10, 4, 7, 6)
> names(fruit_price) <- c('orange','banana','apple','peach')
> fruit_price
orange banana apple peach
10 4 7 6

猜你喜欢

转载自blog.csdn.net/genome_denovo/article/details/81951455