Ich bin mit einem Code, der sehr lange dauert, um zu berechnen. Ich habe meinen Code unter Verwendung von foreach()%dopar%
parallel gemacht und bin auf dem Cluster gelaufen.Rückverfolgung seltenen Fehler
Es läuft in der Regel gut, aber manchmal stürzt ab und ich bekomme die folgende Fehlermeldung: Error in { : task 4 failed - "missing value where TRUE/FALSE needed" Calls: %dopar% -> <Anonymous> Execution halted
Jetzt heißt es Execution gestoppt, sondern nur für diesen speziellen Kern so die anderen weiterlaufen und am Ende scheitert es zur Ausgabe aber doesn Sag es mir nicht vorher. Ich denke, es ist ein Problem mit einer if
Aussage. Ich habe versucht, den Code auf meinem Computer zu simulieren, aber es ist so selten, dass ich es nicht simulieren kann.
Der Code kann problemlos 100 Stunden lang ausgeführt werden, wobei 100 000 Schleifen ausgeführt werden und nur einer von ihnen fehlschlägt.
Meine Fragen sind: Kann ich zurückverfolgen, wo der Fehler war? (Ich lasse den Code auf einem Cluster laufen, so dass ich nicht all die netten Rstudio-Sachen habe)
Ist es auch möglich, immer noch von einer foreach()
-Schleife auszugeben, selbst wenn eine der Aufgaben abgestürzt ist?
Oder vielleicht irgendeine Methode, die Leute benutzen, damit ich den Unfall auf meinem Computer geschehen lassen kann?
Ich kann den Code bei Bedarf schreiben, bitte fragen, ob es hilft.
wickeln Sie Ihre Berechnung in einem try(). Dann werden Sie alle Ergebnisse haben und in der Lage sein, das Problem zu untersuchen –
@KarlForner: Ich kann nicht scheinen, "Versuch" Arbeit zu machen. Es beschwert sich über "Unerwartete Symbole", wenn es nur mein Code ist ... Gibt es eine besondere Art, es zu benutzen? Ich bin überhaupt nicht damit vertraut. – TAllieri
'try' oder' trycatch' ist ein guter Rat. Eine andere Möglichkeit besteht darin, die * Eingabe * (d. H. Die j-te Datenteilmenge) zu protokollieren, die bei jedem parallelen Aufruf verwendet wird, so dass Sie die Datenmenge eingrenzen können, die das Problem verursacht hat. Stellen Sie in der Zwischenzeit sicher, dass Sie in Ihrer Funktion einen Validierungscode haben, z. B. prüfen Sie, ob 'length (something)> 0' und'! Is.na (something) 'TRUE sind, bevor Sie' if (something) 'anwenden . –