考虑
> 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
答案 0 :(得分:3)
这是由于运营商的优先级。在?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))
!
位于&
之前。