将否定的逻辑值一起添加时的有趣结果

时间:2014-12-01 02:40:45

标签: r

考虑

> TRUE + FALSE
[1] 1

现在,使用is.na函数和否定运算符!设置一个评估逻​​辑的情境:

> x = NA
> y = "not NA"

评估为TRUEFALSE

> !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

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))

!位于&之前。