对 R 中的'or'和'and'运算符有疑问?



我有一个关于的一般性问题r中的操作符

在下面的例子中,我给两个变量xy赋值,我只是对它们做一些逻辑运算。但是当我把表达式用括号括起来时,结果就改变了……我想知道这背后的逻辑是什么?例如:

x = 10
y = 2
# x or y is equal to 2
>x|y == 2
[1] TRUE

但是当我加上括号时:

> (x|y) == 2 
[1] FALSE

另外,如果我只检查x:

> x|x == 2
[1] TRUE
> (x|x) == 2 
[1] FALSE

同理,&:

> x&y == 2
[1] TRUE
> (x&y)==2
[1] FALSE

我知道这可能是一个基本的问题,但背后的逻辑并不像我原来想象的那样直观!我知道网上有很多关于这些运营商的资源。但似乎没有一个能直接回答这类问题。我想知道这到底是怎么回事?

原因与将非零值转换为TRUE和将零转换为FALSE有关

> as.logical(x)
[1] TRUE
> as.logical(0)
[1] FALSE

当我们使用|(OR)时,它检查是否有任何元素非零,因此返回TRUE,而在&中,两个元素都应该是非零

> x|y
[1] TRUE

,当我们与2比较时,它不相等,因为lhs是逻辑的,当强制为1时(二进制值对应于1/0的TRUE/FALSE), rhs为2

> (x|y) == 2 
[1] FALSE
> (x|y) == 1
[1] TRUE

此外,如果不将操作符括在括号

内,则存在操作符优先级。
x&(y == 2)
[1] TRUE

返回TRUE,因为x非零,y ==2返回TRUE,因此都返回TRUE

> y==2
[1] TRUE

最新更新