簡體   English   中英

dplyr :: mutate:臨時昂貴的變量作為其他幾個操作的輸入,rowwise

[英]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

這是使用purrrinvoke_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM