[R] How to catch both warnings and errors?
Martin Maechler
maechler at stat.math.ethz.ch
Thu Dec 9 12:33:15 CET 2010
>>>>> Marius Hofert <m_hofert at web.de>
>>>>> on Mon, 6 Dec 2010 11:10:17 +0100 writes:
> Hmm... still not quite what I was hoping for...
indeed.
We (Marius and I) now sat together,
and have constructed the following quite nice,
quite general solution:
With thanks to Luke Tierney's explanation (from 2004 !)
http://tolstoy.newcastle.edu.au/R/help/04/06/0217.html
and Bill Dunlap's note (mentioned in Marius' original post):
##' We want to catch *and* save both errors and warnings, and in the case of
##' a warning, also keep the computed result.
##'
##' @title tryCatch both warnings and errors
##' @param expr
##' @return a list with 'value' and 'warning', where
##' 'value' may be an error caught.
##' @author Martin Maechler
tryCatch.W.E <- function(expr)
{
W <- NULL
w.handler <- function(w){ # warning handler
W <<- w
invokeRestart("muffleWarning")
}
list(value = withCallingHandlers(tryCatch(expr, error = function(e) e),
warning = w.handler),
warning = W)
}
Testing it here for Marius' three cases :
> str( tryCatch.W.E( log( 2 ) ) )
List of 2
$ value : num 0.693
$ warning: NULL
> str( tryCatch.W.E( log( -1) ) )
List of 2
$ value : num NaN
$ warning:List of 2
..$ message: chr "NaNs wurden erzeugt"
..$ call : language log(-1)
..- attr(*, "class")= chr [1:3] "simpleWarning" "warning" "condition"
> str( tryCatch.W.E( log("a") ) )
List of 2
$ value :List of 2
..$ message: chr "Nicht-numerisches Argument für mathematische Funktion"
..$ call : language log("a")
..- attr(*, "class")= chr [1:3] "simpleError" "error" "condition"
$ warning: NULL
---
Martin Maechler, ETH Zurich
More information about the R-help
mailing list