Quelqu'un a-t-il des exemples / tutoriels de gestion des exceptions dans R? La documentation officielle est très concise.
r
exception-handling
gappy
la source
la source
Réponses:
Outre la réponse de Shane qui vous renvoie vers d'autres discussions StackOverflow, vous pouvez essayer une fonction de recherche de code. Cette réponse originale indiquait que la recherche de code de Google a depuis été interrompue, mais vous pouvez essayer
Pour mémoire, il y en a aussi,
try
mais celatryCatch
peut être préférable. J'ai essayé un compte rapide sur Google Code Search, mais essayez d'obtenir trop de faux positifs pour le verbe lui-même - mais il semble qu'iltryCatch
soit plus largement utilisé.la source
En gros, vous souhaitez utiliser la
tryCatch()
fonction. Consultez l'aide ("tryCatch") pour plus de détails.Voici un exemple trivial (gardez à l'esprit que vous pouvez faire ce que vous voulez avec une erreur):
Jetez un œil à ces questions connexes:
la source
Ce résultat d'une recherche Google associée m'a aidé: http://biocodenv.com/wordpress/?p=15 .
la source
La fonction
trycatch()
est assez simple et il existe de nombreux bons tutoriels à ce sujet. Une excellente explication de la gestion des erreurs dans R peut être trouvée dans le livre Advanced-R de Hadley Wickham , et ce qui suit est une introduction très basiquewithCallingHandlers()
etwithRestarts()
en aussi peu de mots que possible:Disons qu'un programmeur de bas niveau écrit une fonction pour calculer la valeur absolue. Il ne sait pas comment la calculer, mais sait construire une erreur et exprime avec diligence sa naïveté:
Un programmeur de niveau intermédiaire écrit également une fonction pour calculer la valeur absolue, en utilisant la
low_level_ABS
fonction terriblement incomplète . Il sait que le code de bas niveau génère unenegative_value
erreur lorsque la valeur dex
est négative et suggère une solution au problème, en établissant unrestart
qui permet aux utilisateurs demid_level_ABS
contrôler la manière dont semid_level_ABS
remet (ou non) unenegative_value
erreur.Enfin, un programmeur de haut niveau utilise la
mid_level_ABS
fonction pour calculer la valeur absolue et établit un gestionnaire de conditions qui indique aumid_level_ABS
de récupérer d'unenegative_value
erreur à l'aide du gestionnaire de redémarrage.Le but de tout cela est qu'en utilisant
withRestarts()
etwithCallingHandlers()
, la fonctionhigh_level_ABS
a pu indiquermid_level_ABS
comment récupérer des erreurs générées par unelow_level_ABS
erreur sans arrêter l'exécution demid_level_ABS
, ce que vous ne pouvez pas faire avectryCatch()
:En pratique,
low_level_ABS
représente une fonction quimid_level_ABS
appelle beaucoup (peut-être même des millions de fois), pour laquelle la méthode correcte de gestion des erreurs peut varier selon la situation, et le choix de la façon de gérer des erreurs spécifiques est laissé aux fonctions de niveau supérieur (high_level_ABS
).la source
La fonction de redémarrage est très importante dans R hérité de Lisp. C'est utile si vous voulez appeler une fonction dans le corps de la boucle et que vous voulez simplement que le programme continue si l'appel de fonction s'effondre. Essayez ce code:
la source