Reputation: 8377
I would like to understand why, in the the dplyr
or magrittr
package, and more specifically the chaining function %>%
has some trouble with the basic operators +
, -
, *
, and /
Chaining takes the output of previous statement and feeds it as first argument of the next:
1:10 %>% sum
# [55]
Thus how come this doesn't work
1:10 %>% *2 %>% sum
1:10 %>% .*2 %>% sum
I also found that the following syntax works for adding/substracting, but not multiply or divide. why so?
1:10 %>% +(2) # works OK
1:10 %>% *(2) # nope...
So should I write an anonymous function even to do a *2
operation on my data.frame?
1:10 %>% (function(x) x*2) %>% sum
Thanks, I couldn't find the answer in other SO questions.
Upvotes: 49
Views: 13617
Reputation: 712
Thought I'd share the magrittr
documentation so you could see all of your options!
Currently implemented aliases are...
extract `[`
extract2 `[[`
inset `[<-`
inset2 `[[<-`
use_series `$`
add `+`
subtract `-`
multiply_by `*`
raise_to_power `^`
multiply_by_matrix `%*%`
divide_by `/`
divide_by_int `%/%`
mod `%%`
is_in `%in%`
and `&`
or `|`
equals `==`
is_greater_than `>`
is_weakly_greater_than `>=`
is_less_than `<`
is_weakly_less_than `<=`
not (`n'est pas`) `!`
set_colnames `colnames<-`
set_rownames `rownames<-`
set_names `names<-`
set_class `class<-`
set_attributes `attributes<-`
set_attr `attr<-`
Upvotes: 3
Reputation: 9786
As an addition to the answer above, it is handy to use Aliases
in magrittr
package, e.g.:
magrittr's pipeable operator replacements
operator | functional alternative |
---|---|
x * y | x %>% multiply_by(y) |
x ^ y | x %>% raise_to_power(y) |
x[y] | x %>% extract(y) |
Upvotes: 1
Reputation: 27388
Surround the operators with backticks or quotes, and things should work as expected:
1:10 %>% `*`(2) %>% sum
# [1] 110
1:10 %>% `/`(2) %>% sum
# [1] 27.5
Upvotes: 66
Reputation: 67778
Or use the Aliases
in magrittr
package, e.g.:
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
The Aliases
include 'words' for boolean operators, extract/replace, and arithmetic operators
Upvotes: 50