2016-07-21 122 views
1

我在foreach循環中運行並行進程,該循環在每個循環結束時返回一個7x30矩陣。當我使用這個命令來運行循環,它完成11.5分:r:合併foreach結果

myData<-foreach(i=1:270000, .packages='quadprog')%dopar%{ 

不幸的是,myData的是一個清單,我想該列表中的每一個情節矩陣的最後兩列。所以,我用這個命令將其轉換成數據幀ggplot2

myData<-Reduce(rbind.data.frame, myData[1:length(myData)]) 

這個命令非常適用於小型的myData但myData的是270000點矩陣長。它要麼掛斷,要麼花很長時間才能轉換。

於是,我嘗試運行使用此命令的循環,使輸出是擺在首位的數據幀:

myData<-foreach(i=1:270000, .combine=rbind.data.frame, .packages='quadprog')%dopar%{ 

這已經在過去的兩年時間裏保持運行(比11分鐘程較長)。

有沒有一種方法可以有效地從這些循環中獲取輸出並將其放入可以繪製它的格式?

有趣的是,當我查看Windows任務管理器時,第一次調用循環會立即將我所有的CPU內核使用率都發送到100%。第二個更接近10%,即使我在doSnow下設置了相同數量的羣集。

回答

0

使用rbindlist代替rbind結合的結果,並.multicombine加快步伐

comb = function(...)rbindlist(...) 
myData = foreach(i = 1:27000 , .combine = comb ,.packages='quadprog',.multicombine = TRUE) %dopar% {