问题描述
我在使用magrittr %>%
时遇到了一个问题,当lhs
包装在!()
中时,产生了意外的输出。例如,我希望这两行的输出是相同的。
sum( !( c(1,2,3,4) == 1 ) )
!( c(1,4) == 1 ) %>% sum()
但是,第一行按预期返回“ 3”,而第二行则返回“ FALSE”。为什么呢?
解决方法
该问题是优先考虑的问题,将(..)
包裹在第一个表达式周围,并且其行为符合预期。
(!(c(1,2,3,4) == 1)) %>% sum
#[1] 3
您可以在?Syntax
上找到优先级表,从中可以看到%any%
的优先级高于!
。
通过%>%
,我们也可以在链接中使用取反(!
)
library(magrittr)
( c(1,4) == 1 ) %>%
`!` %>%
sum
#[1] 3
或者使用aliases
中的magrittr
c(1,4) %>%
equals(1) %>%
not %>%
sum
#[1] 3