Question

Comment lancer " 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 consulté récupérer et parcourir et traceback mais, bien, ils semblaient être proches, mais pas ce que je cherchais.

Était-ce utile?

La solution

Voir help (tryCatch) :

  

Les conditions sont signalées par   ' signalCondition '. De plus, le
  Les fonctions ' stop ' et ' warning ' ont   été modifié pour accepter également
  arguments de condition.

et ultérieurement sous "Voir aussi":

  

" stop " et " avertissement " conditions de signal et " try " est essentiellement un    version simplifiée de ' tryCatch '.

donc vous voulez probablement stop .

Autres conseils

Exemple simple:

f <- function(a, b){ 

    if (a == 0){ 
            stop("error message")
    }
 }

Au-delà des fonctions de base mentionnées par Dirk:

Le package R.oo comporte une exception supplémentaire. fonctionnalité de manipulation, 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 contrôles de cohérence 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érifiant si la colonne col1 existe:

if(! any(grepl('^col1

ou

if(! any(grepl('^col1

Par exemple

,colnames(df1)))) stop("nonexistent column")

ou

<*>

Par exemple

,colnames(df1)))) return(-1)

Par exemple

,colnames(df1)))) stop("nonexistent column")

ou

<*>

Par exemple

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top