2017-10-19 117 views
0

是否可以使用dplyr包中的管道進行數值計算?一個簡單的例子是:使用dplyr管道命令進行數值計算

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

追加了解更多關於管道工作原理以及何時可以和不能使用的信息。我非常喜歡使用管道功能,並希望找到一種方法將其用於這些類型的數字計算。

非常感謝

+1

管道是來自'magrittr'軟件包,而不是'dplyr'軟件包。我建議看看[自述文件](https://github.com/tidyverse/magrittr)。 – Gregor

+1

但是,使用管道來使事情更清晰,更具可讀性。這就是它的目的。你的第一個例子使事情變得更加難以閱讀。 – Gregor

+0

感謝您澄清管道來自哪個包裝,我確實同意Gregor應該始終使用管道使事情更容易閱讀 – EDennnis

回答

4

您有一個操作符優先級問題。它試圖開始做

0.15 %>% 3.8416 

這是沒有意義的。你需要將所有的計算中一個代碼塊

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

這是我一直在尋找的。感謝您的答覆。 – EDennnis

2

所有這些都是等價的,你需要爲magrittr第一個,dplyr是足夠未來2:

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)} 
+1

感謝您在我們希望通過數據或計算命令(即分割,乘法等)時展示管道命令的靈活性來進行數值分析。 – EDennnis