问题描述
有人可以向我解释“!”在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
。