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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top