Ich beobachtete eine andere zwischen einer interaktiven und nicht-Interaktion R-Sitzung über traceback()
, die ich nicht verstehe. Für den folgenden Code wird ein Fehler erzeugt, aber in einer interaktiven R-Sitzung kann ich die Traceback-Informationen sehen. Wenn ich den Code unter test.R
hinter Rscript test.R
oder R -f test.R
abspeichere, kann ich den Traceback nicht mehr sehen:traceback() für interaktive und nicht interaktive R-Sitzungen
f = function() {
on.exit(traceback())
1 + 'a'
}
f()
In einer interaktiven R Sitzung:
> f = function() {
+ on.exit(traceback())
+ 1 + 'a'
+ }
> f()
Error in 1 + "a" : non-numeric argument to binary operator
1: f()
Nicht interaktive Ausführung:
$ Rscript test.R
Error in 1 + "a" : non-numeric argument to binary operator
Calls: f
No traceback available
Execution halted
I habe keine Erklärung in ?traceback
gesehen, und ich frage mich, ob es eine Möglichkeit gibt, Traceback für nicht interaktive R-Sitzungen zu aktivieren. Vielen Dank!
'traceback' für ein Objekt sieht namens '.traceback' in' basenv() '. Es sieht so aus (aus 'src/main/errors.c'), dass es nur erstellt wird, wenn unter anderem' R_Interactive || haveHandler'. Ohne '.traceback' erhalten Sie die Meldung" Keine Traceback verfügbar ". Es gibt auch eine Warnung unter "Traceback", die "Traceback" erwähnt. – BenBarnes
Wenn Sie in Ihrem Skript nur Optionen (error = traceback) setzen und Ihren on.exit-Aufruf entfernen, haben Sie den gewünschten Effekt. Obwohl es aufgrund des "Schritts" des Fehlers zu einer Duplizierung kommt. –
@BrandonBertelsen, Soweit ich das beurteilen kann, gibt es immer noch keinen Zugriff auf Traceback-Informationen, obwohl der Aufruf-Stack im Falle eines Fehlers in einer nicht-interaktiven Sitzung trotzdem zurückgegeben wird. – BenBarnes