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