在R中使用NOT(!)运算符和数字

时间:2016-01-20 21:33:42

标签: r operators

我试图理解!在R中运算符更好,我对如何应用于数字感到困惑。以下代码表示什么,为什么两个相等查询不相同?

> !5 == 7
[1] TRUE
> 5 == !7
[1] FALSE
> !5
[1] FALSE

谢谢!

2 个答案:

答案 0 :(得分:3)

首先:!运算符将非逻辑强制转换为逻辑,然后将它们反转。除0以外的任何值都会计算为逻辑TRUE,然后!运算符会将其翻转为FALSE

其余的与操作顺序有关。

!5 == 7

评估到

!(5==7)

相当于

!(FALSE)

返回TRUE

尽管

5 == !7

评估到

5 == FALSE

返回FALSE

相当于5 == !7的{​​{1}}(两者都返回(!5) == 7

答案 1 :(得分:0)

!强制其参数为逻辑,因此:

as.logical(-3L:3L)
# [1]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
as.logical(seq(-2,2, by = 0.5))
# [1]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE

如您所见,0为FALSE,其他一切都为TRUE。

为了更好地理解这一点,请参阅! - 就像R中的所有内容 - 函数:

> `!`
function (x)  .Primitive("!")

所以,你正在将!函数应用于数字参数,这些参数被强制为逻辑,如上所述。

使用==比较逻辑值与数值时,数值也会被强制转换为逻辑值。

在你的第一个例子中(!5 == 7)是由于优先顺序; ==的优先级高于!