39

我想了解为什么在dplyrormagrittr包中,更具体地说,链接函数%>%在基本运算符+-*/

链接获取前一个语句的输出并将其作为下一个语句的第一个参数提供:

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 问题中找不到答案。

4

3 回答 3

57

用反引号或引号包围运算符,事情应该按预期工作:

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

1:10 %>%  `/`(2) %>% sum
# [1] 27.5
于 2014-12-08T18:28:59.373 回答
45

或使用Aliasesinmagrittr包,例如:

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布尔运算符、提取/替换和算术运算符的包含“单词”

于 2014-12-08T18:35:24.137 回答
0

作为上述答案的补充,Aliasesmagrittr包中使用很方便,例如:

magrittr 的可管道操作员替代品

操作员 功能替代品
x * y x %>% multiply_by(y)
x^y x %>% raise_to_power(y)
x[y] x %>% extract(y)
于 2021-12-22T22:30:40.507 回答