问题
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.
回答1:
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
回答2:
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
来源:https://stackoverflow.com/questions/27364390/chain-arithmetic-operators-in-dplyr-with-pipe