R中的逻辑布尔否定运算符:优先级和关联

问题描述

有人可以向我解释“!”在R中工作? 当我第一次看到这个时,我很困惑:

> x = c(1,1) * !c(TRUE,FALSE)
> y = c(2,2) * c(TRUE,FALSE) 
> z = c(1,FALSE) + c(2,FALSE) 
> x + y
[1] 2 1
> z
[1] 0 1

它是如此奇怪,并且可能导致许多错误的计算,但是我在文档中找不到它。 我正在使用R 4.0.2

解决方法

这是因为!运算符的优先级比加法运算符+。表达式

c(1,1) * !c(TRUE,FALSE) + c(2,2) * c(TRUE,FALSE) 

解析为

c(1,1) * !( c(TRUE,FALSE) )

而不是

(c(1,FALSE)) + (c(2,FALSE))

这可能是您(和大多数其他人)所期望的。有关运算符优先级的完整列表,请参见?Syntax