2016-07-21 19 views
1

Ich führe einen parallelen Prozess in einer foreach Schleife, die eine 7x30-Matrix am Ende jeder Schleife zurückgibt. Wenn ich die Schleife mit diesen Befehl ausführen, beendet es in 11,5 Minuten:r: Kombinieren foreach Ergebnisse

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

Leider myData eine Liste ist, und ich möchte in dieser Liste die letzten beiden Spalten jeder Matrix zeichnen. So verwende ich diesen Befehl es zu einem Datenrahmen zu konvertieren für ggplot2:

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

Dieser Befehl funktioniert gut für eine kleine myData aber myData ist 270.000 Matrizen lang. Es hängt entweder auf oder dauert sehr lange, um es zu konvertieren.

Also, ich versuche, die Schleife um diesen Befehl auszuführen, so dass der Ausgang ein Datenrahmen in erster Linie ist:

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

Dies ist für die letzten zwei Stunden wurde (Art und Weise länger als 11 Minuten in Betrieb).

Gibt es eine Möglichkeit, die Ausgabe von diesen Schleifen effizient zu erhalten und in ein Format zu bringen, in dem ich es grafisch darstellen kann?

Interessanterweise, wenn ich den Windows Task-Manager betrachte, sendet der erste Aufruf der Schleife sofort alle meine CPU-Kernnutzung zu 100%. Der zweite ist näher bei 10%, obwohl ich die gleiche Anzahl von Clustern unter doSnow eingerichtet habe.

Antwort

0

Verwendung rbindlist statt rbind Ihre Ergebnisse zu kombinieren und .multicombine es zu beschleunigen

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