Schleife innerhalb einer foreach-Schleife mit doparallel

8

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     
sbg 19.05.2017, 16:23
quelle

2 Antworten

2

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%     
wici 27.05.2017, 11:10
quelle
1

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:

ersetzen %Vor%

Oder mit:

%Vor%

Da Sie kein reproduzierbares Beispiel angegeben haben, habe ich es nicht getestet.

    
Istrel 26.05.2017 08:18
quelle

Tags und Links