Ich habe eine Funktion, die eine Schleife enthält
%Vor%rs ist ein numerischer Vektor, z1.d ist ein Zoo und y ist auch ein numerischer Vektor.
Wenn ich versuche, die Funktion in einer parallelen Schleife auszuführen:
%Vor%Ich erhalte den folgenden Fehler:
%Vor%Ich weiß nicht warum, aber ich habe gemerkt, wenn ich die Schleife aus meiner Funktion nehme, gibt es keinen Fehler.
Wenn ich genau den gleichen Code mit% do% anstelle von% dopar% verwende (läuft also nicht parallel), funktioniert es gut (langsam, aber ohne Fehler).
BEARBEITEN: Wie hier gefragt, ist ein Beispiel der Parameter:
%Vor%r ist in der foreach-Schleife
definiert Der Fehler tritt auf, weil Sie zoo
für Ihre Worker nicht initiieren konnten. So wissen die Arbeiter nicht, wie sie mit Zooobjekten richtig umgehen sollen, sondern behandeln sie als Matrizen, die sich beim Subsetting nicht gleich verhalten!
Die schnelle Lösung für Ihr angegebenes Problem wäre, .packages="zoo"
zu Ihrem foreach
-Aufruf hinzuzufügen.
Meiner Meinung nach müssen Sie nicht einmal parallele Berechnungen durchführen. Sie können Ihre Funktion dramatisch verbessern, wenn Sie numerische Vektoren anstelle von Zoo-Objekten verwenden:
%Vor%Einfache Timings zeigen die Verbesserung:
%Vor%Während die Ergebnisse identisch sind (nur die Spaltennamen unterscheiden sich)
%Vor%Es simuliert, als wäre ein Fehler in Ihrem Funktionscode.
In Zeile 2 erstellen Sie ein 1-dimensionales Objekt
%Vor%In Zeile 9 behandelst du es wie 2-dimensional
%Vor%Aus diesem Grund haben Sie den Fehler "falsche Anzahl von Dimensionen". Obwohl, ich weiß nicht, warum es funktioniert in%% Variante.
In jedem Fall müssen Sie den Code in for
loop mit:
Oder mit:
%Vor%Da Sie kein reproduzierbares Beispiel angegeben haben, habe ich es nicht getestet.
Tags und Links r foreach doparallel