考虑
> TRUE + FALSE
[1] 1
现在,设置一种情况,使用
is.na
将某些东西评估为逻辑值。函数和否定运算符 !
:> x = NA
> y = "not NA"
评估为
TRUE
和 FALSE
:> !is.na(x)
[1] FALSE
> !is.na(y)
[1] TRUE
但,
> !is.na(x) + !is.na(y)
[1] FALSE
这很奇怪。添加额外的括号似乎可以解决它,但为什么会发生这种情况?
> (!is.na(x)) + (!is.na(y))
[1] 1
最佳答案
这是由于运算符优先级。见 ?Syntax
+
先于 !
.有两种方式
!is.na(x) + !is.na(y)
可以解释为:
`!`(`+`(is.na(x), !is.na(y)))
或者
`+`(`!`(is.na(x)), !is.na(y))
由于运算符优先级的顺序,R 以第一种方式解释表达式。将此与
!is.na(x) & !is.na(y)
这里 R 将表达式解释为
`&`(`!`(is.na(x)), !is.na(y))
如
!
先于 &
.
关于r - 将否定的逻辑值加在一起时的有趣结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27220931/