dplyr中的链算术运算符,%>%pipe

age*_*nis 24 r piping dplyr magrittr

我想知道为什么,在中dplyrmagrittr包装,更具体的链接功能%>%有一定的麻烦与基础运营商+,-,*,和/

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

1:10 %>% sum
# [55]
Run Code Online (Sandbox Code Playgroud)

那么为什么这不起作用

1:10 %>%  *2 %>% sum
1:10 %>% .*2 %>% sum
Run Code Online (Sandbox Code Playgroud)

我还发现以下语法适用于添加/减少,但不能乘法或除法.为什么这样?

1:10 %>% +(2) # works OK
1:10 %>% *(2) # nope...
Run Code Online (Sandbox Code Playgroud)

那么我应该写一个匿名函数甚至*2对我的data.frame 进行操作吗?

1:10 %>% (function(x) x*2) %>% sum
Run Code Online (Sandbox Code Playgroud)

谢谢,我在其他SO问题中找不到答案.

jba*_*ums 37

操作员用反引号或引号包围,事情应按预期工作:

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

1:10 %>%  `/`(2) %>% sum
# [1] 27.5
Run Code Online (Sandbox Code Playgroud)

  • 最好使用反引号来引用,因为它更清楚地区分非语法函数名和字符串.(在我看来,"+"(1,3)`的作用是一个历史人工制品. (8认同)

Hen*_*rik 24

或者使用Aliasesin 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
Run Code Online (Sandbox Code Playgroud)

Aliases包括"单词"进行布尔运算符,提取/替换,和算术运算符