rhs канала magrittr возвращает FALSE, когда lhs помещается в !()

#r #dplyr #magrittr

#r #dplyr #magrittr

Вопрос:

Я столкнулся с проблемой, используя magrittr %>% where при обертывании создается неожиданный вывод lhs !() . Например, я ожидал, что выходные данные этих двух строк будут идентичными.

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

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

Однако первая строка возвращает «3», как и ожидалось, тогда как вторая строка возвращает «FALSE». Почему это так?

Ответ №1:

Проблема заключается в приоритете, оберните (..) вокруг первого выражения, и оно ведет себя так, как ожидалось.

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

Вы можете найти таблицу приоритетов ?Syntax , где вы можете видеть, что %any% имеет более высокий приоритет, чем ! .

Ответ №2:

С %>% помощью negate () мы можем использовать negate ( ! ) также в цепочке

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

Или используйте aliases из magrittr

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