Équivalent de "jeter" dans R
Comment on "jette" une erreur dans R? J'ai une fonction qui prend un cadre de données et des noms de colonnes et les remplit. Si les colonnes n'existent pas, je veux que la fonction s'arrête et arrête toutes les fonctions qui en dépendent.
J'ai regardé recover
et browse
et traceback
mais bon, ils semblaient être proches mais pas ce que je cherchais.
Voir help(tryCatch)
:
Les conditions sont signalées par '
signalCondition
'. De plus, le
Les fonctions 'stop
' et 'warning
' ont été modifiées pour accepter également
arguments de condition.
et plus tard sous 'Voir aussi':
Les conditions de signal '
stop
' et 'warning
' et 'try
' sont essentiellement une version simplifiée de 'tryCatch
'.
donc vous voulez probablement stop
.
Exemple simple:
f <- function(a, b){
if (a == 0){
stop("error message")
}
}
Au-delà des fonctions de base que Dirk mentionne:
Le paquet R.oo possède une fonctionnalité supplémentaire de gestion des exceptions, y compris une fonction throw () qui est très utile. Vous pouvez intercepter des exceptions avec les fonctions habituelles try ou trycatch:
> try(throw("Division by zero.")); print("It's ok!");
Error: [2009-10-22 10:24:07] Exception: Division by zero.
[1] "It's ok!"
Vous pouvez en savoir plus à ce sujet ici: http://www1.maths.lth.se/help/R/R.oo/
En fait, la fonction stopifnot
est très pratique pour implémenter des vérifications de sécurité dans votre code. Il prend plusieurs expressions logiques et renvoie une erreur si l'une d'entre elles est évaluée à false.
Exemple: pour vérifier si la colonne 'c' existe dans la trame de données 'df':
df <- data.frame(a = numeric(), b = numeric())
stopifnot(!is.null(df$c))
Cela provoquera l'erreur suivante:
Error: !is.null(df$c) is not TRUE
Vous pouvez vérifier si la colonne existe et faire ce que vous voulez.
Supposons un data.frame
nommé df1
et vérifier si la colonne col1
existe:
if(! any(grepl('^col1$',colnames(df1)))) stop("nonexistent column")
ou
if(! any(grepl('^col1$',colnames(df1)))) return(-1)
Par exemple