Je traite une fonction qui jette des erreurs et des avertissements.
(associé: Un avertissement sur l'avertissement ) em> Souvent, un avertissement procédera à une erreur. Dans ces situations, je voudrais ignorer l'avertissement et traiter uniquement l'erreur. P> D'autre part, s'il n'y a qu'un avertissement (sans erreur), alors je voudrais attraper l'avertissement. P> J'essaie de travailler avec le trycatch code> notoirement-easy à utiliser. P> Ma question immédiate est:
Existe-t-il un moyen de forcer Ma compréhension du solutions non disponibles: p> tryculatch code> pour traiter
erreur code> S avant
AVERTISSEMENT code> S (ou pour ignorer les avertissements quand il y a une erreur)? P >
? TraceCatch CODE> La documentation est que les conditions sont traitées sur la FIFO, auquel cas la réponse à ma question immédiate n'est pas - du moins pas directement. Dans ce cas,
Suppresswarnings code> # Je voudrais toujours attraper et gérer les avertissements li>
options (avertir = 2) code> # Certains avertissements sont inoffensifs li>
ul>
test(F.errorAndWarning)
# ERROR CAUGHT
4 Réponses :
J'ai écrit une fonction d'aide pratique pour évaluation dans le packer package, qui capture tous les avertissements, Erreurs et tout ce qui est imprimé sur la sortie standard, ainsi que l'objet RAW R renvoyé dans l'appel:
> library(pander) > evals('F.errorAndWarning()') [[1]] $src [1] "F.errorAndWarning()" $result NULL $output NULL $type [1] "error" $msg $msg$messages NULL $msg$warnings [1] "Warning before the error" $msg$errors [1] "error" $stdout [1] "I have moved on." attr(,"class") [1] "evals"
J'écrirais une fonction qui exécute une expression code> et donne la priorité aux erreurs.
Cela a l'air très utile, merci. Je vais devoir le digérer pendant une minute
Ceci concerne la J'ai eu un problème similaire où je voulais lier mon Les fonctions de journalisation des avertissements et des erreurs d'essayer d'essayer et continuent toujours après des avertissements et peuvent également effectuer plusieurs tentatives d'essayer de prendre des captures, par exemple pour accéder à un lecteur de réseau fragile. C'est ce que j'ai fini par utiliser. Cette version ou une version plus simplifiée pourrait aider à ce que votre après. P>
Très vaste travail et beau travail de toutes les trois réponses, mais je pense que beaucoup de gens recherchent également un moyen bref et simple de gérer un avertissement, mais une exécution continue. Qui peut être fait assez peu de temps, comme l'a montré Matthew: En appelant un redémarrage (et en utilisant SassAlinghandLers):
test <- function(FUN) withCallingHandlers( expr=FUN(), error=function(e) cat("ERROR CAUGHT\n"), warning=function(w) {cat('WARNING CAUGHT\n'); invokeRestart(findRestart('muffleWarning'))} )
Avez-vous fini par utiliser l'une des réponses ici?
Matt, j'ai utilisé un hybride de la réponse de la tienne et de Hansi. Je n'étais pas sûr où placer la coche. Je vais le placer sur Hansi's parce que je pense que son code hautement commenté sera utile pour les autres recherches - plus il pourrait utiliser quelques points supplémentaires :) Merci cependant, et pour le rappel