【问题标题】:Numeric calculations using dplyr piping commands使用 dplyr 管道命令进行数值计算
【发布时间】:2017-10-19 18:02:44
【问题描述】:

是否可以使用 dplyr 包中的管道进行数值计算?一个简单的例子是:

    0.15 %>% 3.8416 * (.*(1-.))/(0.03^2)  #does not work
    seq(1,10,1) %>% log(.) %>% .^2        #works

想更多地了解管道的工作原理以及何时可以使用和不可以使用。我真的很喜欢使用管道功能,并希望找到一种方法将其用于这些类型的数值计算。

非常感谢

【问题讨论】:

  • 管道来自magrittr 包,而不是dplyr 包。我建议看看the readme
  • 但是,使用管道使事情更清晰、更易读。这就是它的用途。您的第一个示例使事情变得更难阅读。
  • 感谢您澄清管道来自哪个包装,我同意 Gregor 的观点,即管道应始终用于使事情更易于阅读

标签: r dplyr numeric piping


【解决方案1】:

您遇到了运算符优先级问题。它试图从做开始

0.15 %>% 3.8416

这没有意义。您需要将所有计算分组到一个代码块中

0.15 %>% {3.8416 * (.*(1-.))/(0.03^2)}

【讨论】:

  • 这是我一直在寻找的。谢谢你的回复。
【解决方案2】:

所有这些都是等价的,第一个需要magrittr,接下来的两个需要dplyr

library(magrittr)
0.15 %>% multiply_by(subtract(1,.)) %>% multiply_by(3.8416) %>% divide_by(0.03^2)
0.15 %>% `*`(`-`(1,.)) %>% `*`(3.8416) %>% `/`(0.03^2)
0.15 %>% {3.8416 * (.*(1-.))/(0.03^2)}

【讨论】:

  • 感谢您展示了管道命令在我们希望传递数据或计算命令(即除法、乘法等)时进行数值分析的灵活性
最近更新 更多