Подтвердить что ты не робот

Арифметические операторы цепочки в dplyr с%>% pipe

Я хотел бы понять, почему в пакете dplyr или magrittr и, более конкретно, функция цепочки %>% имеет некоторые проблемы с основными операторами +, -, *, и /

Chaining выводит результат предыдущего оператора и передает его как первый аргумент следующего:

1:10 %>% sum
# [55]

Итак, почему это не работает

1:10 %>%  *2 %>% sum
1:10 %>% .*2 %>% sum

Я также обнаружил, что следующий синтаксис работает для добавления/вычитания, но не умножения или деления. почему так?

1:10 %>% +(2) # works OK
1:10 %>% *(2) # nope...

Так что я должен написать анонимную функцию даже для выполнения операции *2 на моем data.frame?

1:10 %>% (function(x) x*2) %>% sum

Спасибо, я не смог найти ответ в других вопросах SO.

4b9b3361

Ответ 1

Окружать операторы обратными окнами или кавычками, и все должно работать как ожидалось:

1:10 %>%  `*`(2) %>% sum
# [1] 110

1:10 %>%  `/`(2) %>% sum
# [1] 27.5

Ответ 2

Или используйте пакет Aliases in magrittr, например:

1:10 %>% multiply_by(2)
# [1]  2  4  6  8 10 12 14 16 18 20

1:10 %>% add(2)
# [1]  3  4  5  6  7  8  9 10 11 12

Aliases включает слова для логических операторов, extract/replace и арифметические операторы