我在foreach
循环中运行并行进程,在每个循环结束时返回一个7x30矩阵。当我使用此命令运行循环时,它将在11.5分钟内完成:
myData<-foreach(i=1:270000, .packages='quadprog')%dopar%{
不幸的是,myData是一个列表,我想绘制该列表中每个矩阵的最后两列。因此,我使用此命令将其转换为ggplot2
的数据框:
myData<-Reduce(rbind.data.frame, myData[1:length(myData)])
此命令适用于小型myData,但myData长度为270,000个矩阵。它要么挂断,要么需要很长时间才能转换。
因此,我尝试使用此命令运行循环,以便输出首先是数据框:
myData<-foreach(i=1:270000, .combine=rbind.data.frame, .packages='quadprog')%dopar%{
这已经持续了两个小时(超过11分钟)。
有没有办法有效地从这些循环中获取输出并将其放入我可以绘制图形的格式中?
有趣的是,当我查看Windows任务管理器时,第一次调用循环立即将我的所有CPU核心使用率发送到100%。即使我在doSnow
下设置了相同数量的群集,第二个也接近10%。
答案 0 :(得分:0)
使用rbindlist而不是rbind来合并你的结果和.multicombine来加快它的速度
comb = function(...)rbindlist(...)
myData = foreach(i = 1:27000 , .combine = comb ,.packages='quadprog',.multicombine = TRUE) %dopar% {