我试图理解!在R中运算符更好,我对如何应用于数字感到困惑。以下代码表示什么,为什么两个相等查询不相同?
> !5 == 7
[1] TRUE
> 5 == !7
[1] FALSE
> !5
[1] FALSE
谢谢!
答案 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
)是由于优先顺序; ==
的优先级高于!
。