Antworten:
stopifnot()
Option zum Testen der Gültigkeit, um zu testen, ob der Code das tut, was er tun soll, aber if (blahdiblah) stop("error message")
zum Testen der Eingabe, um zu testen, ob die Eingabe in das Programm gültig ist. Nur letzteres sollte jemals während des normalen Gebrauchs passieren.
assertthat
Paket, das bessere Antworten gibt als stopifnot
: github.com/hadley/assertthat
@ Nick:
Sie können Ihre Fehlermeldung steuern, wenn Sie eine Funktion mit einem beschreibenden Namen schreiben, um die Bedingung zu testen, die einen Fehler in Ihrem Programm auslöst. Hier ist ein Beispiel:
Less_Than_8 = function(x) return(x < 8)
for (i in 1:10)
{
print(i)
stopifnot(Less_Than_8(i))
}
Dadurch werden die Nummern 1 bis 8 gedruckt und anschließend eine Nachricht mit der Aufschrift gedruckt
Error: Less_Than_8(i) is not TRUE
Es wäre schön, wenn das "i" in Klammern durch den Wert ersetzt würde, der den Test nicht bestanden hat, aber Sie bekommen, wofür Sie bezahlen.
Wenn Sie etwas ausgefalleneres brauchen, schauen Sie sich Runit an und testen Sie, wie Harlan es vorgeschlagen hat.
stopifnot()
.
Dies kann mit dem stop
Befehl erreicht werden. Dieser Befehl stoppt die Ausführung einer Funktion und gibt die Fehlermeldung aus. Zum Beispiel können wir testen, ob die Variable something
ist FALSE
:
if(something == FALSE){
stop("error message to print")
}
In ähnlicher Weise gibt der warning
Befehl eine Warnung aus (führt den Code jedoch weiter aus).
if(something == FALSE){
warning("error message to print")
}
Diese werden beide von Base R bereitgestellt und erfordern keine Pakete zum Ausführen oder Schreiben Ihrer eigenen Funktionen. Ich bevorzuge diesen Ansatz, um Code mit weniger Abhängigkeiten zu schreiben, und diese Syntax wird häufig in der Paketentwicklung verwendet. Eine ähnliche Funktionalität wird jedoch vom "assertthat" -Paket mit der assert_that
Funktion unterstützt, die kürzlich als Teil von Hadleys "tidyverse" veröffentlicht wurde.