我有一个包含两个data.table对象的列表。为了给出一个想法,一张桌子得到了40万行& 7个变量,其他有750,000行& 12个变量。这两个表没有相同的列。我对它们进行了大量的修改(每个步骤不同)。重复步骤包括计算总和,找出汇总值的百分位数,每组中的案例数,唯一长度等(每个超过20个步骤)。我使用data.table
包来执行这些步骤。但是,我看到每个所有~20步(总共> 40步)需要一些时间。我想知道如何使用并行处理来加快速度。我假设可以并行处理这些步骤,因为它们是在列表的不同组件上执行的。我做了一个彻底的谷歌搜索来集体讨论想法,但是,我没有找到有用的线索。有没有人这样做过?请稍微说清楚,所以我将非常感激。谢谢
到目前为止,我做了很多。 Result
是包含两个data.table对象的列表。 fun1& fun2包含了我需要对每个data.table对象执行的一组步骤。表现明智我还没有看到任何收益(可能是由于开销?我不知道)。
munge_data<-function(fun1=prep_data1, fun2=prep_data2, result=result){
library(foreach)
library(doParallel)
cl <- makeCluster(2)
registerDoParallel(cl)
fun_munge<-list(quote(prep_data1(result)), quote(prep_data2(result)))
finatest<-foreach (i=1:2, .packages = "data.table") %dopar% {
result<-result
prep_data1<-fun1
prep_data2<-fun2
eval(fun_munge[[i]])
}
stopCluster(cl)
finatest
}