| ##================================================================## |
| ### In longer simulations, aka computer experiments, ### |
| ### you may want to ### |
| ### 1) catch all errors and warnings (and continue) ### |
| ### 2) store the error or warning messages ### |
| ### ### |
| ### Here's a solution (see R-help mailing list, Dec 9, 2010): ### |
| ##================================================================## |
| |
| ##' Catch *and* save both errors and warnings, and in the case of |
| ##' a warning, also keep the computed result. |
| ##' |
| ##' @title tryCatch both warnings (with value) and errors |
| ##' @param expr an \R expression to evaluate |
| ##' @return a list with 'value' and 'warning', where |
| ##' 'value' may be an error caught. |
| ##' @author Martin Maechler; |
| ##' Copyright (C) 2010-2012 The R Core Team |
| 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) |
| } |
| |
| str( tryCatch.W.E( log( 2 ) ) ) |
| str( tryCatch.W.E( log( -1) ) ) |
| str( tryCatch.W.E( log("a") ) ) |