# R使用逻辑向量

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

猜你喜欢

转载自blog.csdn.net/weixin_43408110/article/details/88048490