匹配%的行为%

时间:2016-01-30 06:54:28

标签: r

我觉得我已经接受过训练,通过在我想要否定的逻辑条件周围放置一个支架来否定。

但是我最近看到的东西在我没想到的时候没有括号。

x <- "a"
y <- letters[1:3]
!(x %in% y) # Negate is x in y? I've been trained to do this. FALSE
x %in% y # Is x in y? TRUE
!x %in% y # Negate x is it in y? FALSE 

最后一个结果返回FALSE,但不是说negate x and match y而不是匹配y中的x并且否定。

这种语法有什么变化,突然之间没有必要为了否定而输入括号吗?

!(x %in% y) # FALSE 
!x %in% y # FALSE, but feels like it's correct by coincidence.

1 个答案:

答案 0 :(得分:3)

代码具有操作顺序,就像常规代数一样。在R中,%operator%运算符被列为具有更高优先级,因此基本上在!否定运算符之前进行求值。以下是参考:https://stat.ethz.ch/R-manual/R-devel/library/base/html/Syntax.html

因此,根据R语法评估/解析规则的规律,! a %in% b!(a %in% b)相同,即使它看起来不同。