我有一个关于或的一般性问题和和r中的操作符
在下面的例子中,我给两个变量x
和y
赋值,我只是对它们做一些逻辑运算。但是当我把表达式用括号括起来时,结果就改变了……我想知道这背后的逻辑是什么?例如:
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