R 将否定的逻辑值相加时的有趣结果
考虑R 将否定的逻辑值相加时的有趣结果,r,R,考虑 > 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] 1 这是由于运算符优先
> 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] 1
这是由于运算符优先级。请参见?语法+
在之前代码>。有两种方法
!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))
作为代码>位于和之前 我相信这是因为第一个如果没有括号,code>将执行整个表达式,因此它将否定is.na(x)+的值!is.na(y)
(这是2-也是真的)确实可以解释这种行为,这对我来说似乎非常违反直觉。操作顺序是否有文档记录??Syntax
有一些信息和一些链接感谢您让我了解?Syntax
。
!is.na(x) & !is.na(y)
`&`(`!`(is.na(x)), !is.na(y))