当lhs被放入时,magrittr管道的r-rhs返回FALSE!()



我在使用magrittr %>%时遇到一个问题,当lhs封装在!()中时,会产生意外输出。例如,我期望这两行的输出是相同的。

sum( !( c(1,2,3,4) == 1 ) )
!( c(1,2,3,4) == 1 ) %>% sum()

然而,第一行返回"0";3〃;,而第二行返回"0";"假";。为什么?

问题优先,将(..)包裹在第一个表达式周围,它的行为与预期一致。

(!(c(1,2,3,4) == 1)) %>% sum
#[1] 3

您可以在?Syntax中找到优先级表,其中%any%的优先级高于!

使用%>%,我们也可以在链接时使用否定(!(

library(magrittr)
( c(1,2,3,4) == 1 ) %>%
`!` %>%
sum
#[1] 3

或使用magrittr中的aliases

c(1, 2, 3, 4) %>%
equals(1) %>% 
not %>%
sum
#[1] 3       

最新更新