konnte nicht finden, Funktion in foreach-Schleifen
Ich versuche, verwenden Sie foreach zu tun, multicore computing in R.
A <-function(....) {
foreach(i=1:10) %dopar% {
B()
}
}
dann rufe ich die Funktion A
in der Konsole. Das problem ist, dass ich eine Funktion aufrufen Posdef
innen B
definiert ist, in einem anderen Skript-Datei, die ich Quelle. Ich musste Posdef
in der Liste der export-argument foreach
: .export=c("Posdef")
. Jedoch bekomme ich die folgende Fehlermeldung:
Error in { : task 3 failed - "could not find function "Posdef""
Warum kann R finden Sie diese definierte Funktion?
InformationsquelleAutor der Frage statistician_in_training | 2011-01-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die kurze Antwort ist, dass dies ein Fehler war, parallel backends wie
doSNOW
doParallel
unddoMPI
aber es wurde seitdem behoben.Die etwas längere Antwort ist, dass
foreach
exportiert Funktionen, um die Arbeiter mit einem speziellen "export" der Umwelt, nicht die Umwelt. Dass verwendet werden, um Probleme bei Funktionen, die erstellt wurden, in die Globale Umwelt, da Sie die "export" - Umgebung war nicht in Ihrem Umfang, obwohl Sie wurden nun definiert, in die gleiche "export" - Umgebung. So, Sie konnte nicht sehen, alle anderen Funktionen oder Variablen definiert, die in der "export" - Umgebung, wie "Posdef" in Ihrem Fall.Den
doSNOW
doParallel
unddoMPI
backends ändern Sie nun die dazugehörige Umgebung von der globalen auf die "export" - Umgebung für die exportierten Funktionen via ".export", und scheint entschlossen, diese Fragen.InformationsquelleAutor der Antwort Steve Weston
So kann ich das reproduzieren dieser, für die neugierigen:
Ich in der Lage gewesen, dies zu umgehen, indem Sie die Funktion in einer anderen Datei und laden die Datei in den Körper des foreach. Sie könnten auch offensichtlich bewegen sich die definition der Funktion in die Körper der foreach selbst.
[EDIT -- ich hatte zuvor vorgeschlagen, dass vielleicht ist .export funktioniert nicht mit Funktionsnamen, wurde aber korrigiert, unten].
InformationsquelleAutor der Antwort Paul Eastlund
Schnelle Lösung für das problem mit foreach %dopar% ist, installieren Sie diese Pakete:
Funktionierte es in meinem Fall.
InformationsquelleAutor der Antwort M_D