繁体   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