3

It is a little tricky to show my problem with real data but I hope the following explains:

data_frame(a=c(1,2), b=c(3,4)) %>% 
rowwise %>% 
mutate(c = a*b, d = c-1, e=c+2) %>% 
ungroup

In the above example of course the rowwise is not needed.

Now lets suppose that the calculation to make c is both time consuming, c is a large object and not vectorized. So you don't want to have to execute it twice and you want it to be cleared from the memory after each row calculation happens.

Is there a clever way to do this? Perhaps with purrr::map?

4

1 に答える 1

3

purrrsを使用した回答を次に示します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関数に渡されますが、その関数では使用されないため、そのまま渡されます。

于 2016-12-06T16:35:15.870 に答える