Äquivalent von "werfen" in r
-
05-07-2019 - |
Frage
Wie macht man einen Fehler in R? Ich habe eine Funktion, die einen Datenrahmen und einige Spaltennamen aufnimmt und mit ihnen Sachen macht. Wenn die Spalten nicht vorhanden sind, möchte ich, dass die Funktion aufhören und alle Funktionen abhängig von der Funktion stoppt.
Ich habe mich angesehen recover
und browse
und traceback
Aber nun, sie schienen nah zu sein, aber nicht das, wonach ich suche.
Lösung
Sehen help(tryCatch)
:
Bedingungen werden durch 'signalisiert'
signalCondition
'. zusätzlich
'stop
' und 'warning
'Funktionen wurden geändert, um ebenfalls zu akzeptieren
Zustandsargumente.
und später unter 'See auch':
'
stop
' und 'warning
"Signalbedingungen und"try
"Ist im Wesentlichen eine vereinfachte Version von"tryCatch
'.
Also willst du wahrscheinlich stop
.
Andere Tipps
Einfaches Beispiel:
f <- function(a, b){
if (a == 0){
stop("error message")
}
}
Jenseits der Basisfunktionen, die Dirk erwähnt:
Das R.OO -Paket hat zusätzliche Funktionen zur Ausnahmehandhabung, einschließlich einer Wurf () -Funktion, die sehr nützlich ist. Sie können Ausnahmen mit den üblichen Versuchs- oder Trycatch -Funktionen fangen:
> try(throw("Division by zero.")); print("It's ok!");
Error: [2009-10-22 10:24:07] Exception: Division by zero.
[1] "It's ok!"
Hier können Sie mehr darüber lesen: http://www1.maths.lth.se/help/r/r.oo/
Eigentlich die Funktion stopifnot
ist sehr bequem, um geistige Gesundheitskontrollen in Ihrem Code zu implementieren. Es nimmt mehrere logische Ausdrücke auf und gibt einen Fehler zurück, wenn einer von ihnen an False bewertet wird.
Beispiel: Um zu überprüfen, ob die Spalte 'C' im DataFrame 'DF' vorhanden ist:
df <- data.frame(a = numeric(), b = numeric())
stopifnot(!is.null(df$c))
Dies wirft den folgenden Fehler auf:
Error: !is.null(df$c) is not TRUE
Sie können überprüfen, ob die Spalte existiert, und alles tun, was Sie wollen.
Angenommen a data.frame
genannt df1
und Überprüfung der Spalte col1
existiert:
if(! any(grepl('^col1$',colnames(df1)))) stop("nonexistent column")
oder
if(! any(grepl('^col1$',colnames(df1)))) return(-1)
Zum Beispiel