当lhs放在!中时,magrittr管道的rhs返回FALSE

问题描述

我在使用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