R使用逻辑向量
逻辑运算符
运算符 | 描述 |
---|---|
& | 向量化AND |
一个绝对值 | 向量化or |
&& | 单变量AND |
两个绝对值 | 单变量OR |
在if表达式中,&&和||经常用来执行只需返回单元素逻辑向量的逻辑运算,但是当多元素向量使用&&
时,会有风险,因为它会默默忽略运算符两侧 的向量中除第一个元素以外的其他元素(即只注意第一个元素
)ps:if函数只返回一个值,否则人报错(if只能用作于单值逻辑向量)。
test_direction <- function(x,y,z){
if (x<y $ y<z) 1
else if(x>y & y>z) -1
else 0
}
如果提供的参数是标准数字,那么函数可以完美运行。
test_direction(1,2,3)
ouptput:[1] 1
但是,当某个参数不止一个元素时,&执行向量化运算,并返回一个多元素向量。但是if只能作用于单值逻辑向量,否则,就会产生警告。
test_direction(c(1,2),c(2,3),c(3,4))
Warning in if (x<y $y<z) 1 else if (x < y & y < z) -1 else 0 :
条件的长度大于1,因此只能用其第一元素
output:[1] 1
如果test_direction函数中的&运算修改为&&,那么上式就不会报错,返回的值也是1,因为它只进行第一个元素的运算,1,2,3元素
聚合逻辑向量
最常用的两个逻辑聚合函数是any()和all().只要给定逻辑向量的任何一个元素是TRUE,any就返回TRUE,否则返回FALSE,只有给定的逻辑向量的所有元素都是TRUE,函数all()才返回TRUE,否则返回FALSE。
> x <- c(-2,-3,2,3,1,0,1,2)
> any(x>1)
[1] TRUE
> all(x>1)
[1] FALSE
询问哪个元素为真
which()函数返回逻辑向量中元素TRUE的位置(索引)
> abs(x)>=2
[1] TRUE TRUE TRUE TRUE FALSE FALSE FALSE TRUE
> which(abs(x)>=2)
[1] 1 2 3 4 8
> x[which(abs(x)>=2)]
[1] -2 -3 2 3 2
# 或者用[ ]
> x[abs(x)>=2]
[1] -2 -3 2 3 2
聚合逻辑函数处理缺失值
现实世界中的数据经常包含缺失值,用NA表示,下面的数值向量就是一个简单的例子。
> y <- c(-2,-3,NA,2,3,1,NA,0,1,NA,2)
> any(y>2)
[1] TRUE
> any(y < -2)
[1] TRUE
> any(y< -3)
[1] NA