[英]dplyr::mutate: temporary expensive variable as input to several other operations, rowwise
用真實數據顯示我的問題有點棘手但我希望以下解釋:
data_frame(a=c(1,2), b=c(3,4)) %>%
rowwise %>%
mutate(c = a*b, d = c-1, e=c+2) %>%
ungroup
在上面的例子當然rowwise
。
現在讓我們假設使c
的計算既耗時又大, c
是一個大對象而不是矢量化。 因此,您不希望必須執行兩次,並且希望在每次計算發生后從內存中清除它。
有一個聰明的方法來做到這一點? 也許用purrr::map
?
這是使用purrr
的invoke_rows
的答案。
library(purrr)
MyDf<-data.frame(a=c(1,2), b=c(3,4))
invoke_rows(.d=MyDf, .f=function(a,b){c=a*b
c(d=c-1,
e=c+2)},
.collate="cols")
更新
在回應@JanStanstrup的注釋時,如果您想要另一列作為輸出的一部分但未出現在計算中,則可以執行以下操作:
MyDf<-data.frame(a=c(1,2), b=c(3,4), dummy=c(6,7))
invoke_rows(.d=MyDf, .f=function(a,b,...){c=a*b
c(d=c-1,
e=c+2)},
.collate="cols")
這里, dummy
和任何其他列通過...
作為參數傳遞給.f
函數,但不在該函數中使用,因此它們只是傳遞給它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.