[R] warning inside loop

William Dunlap wdunlap at tibco.com
Tue Jan 12 00:40:24 CET 2010


> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of Rense
> Sent: Monday, January 11, 2010 3:07 PM
> To: r-help at r-project.org
> Subject: [R] warning inside loop
> 
> 
> Hi,
> 
> I'm running some data simulations using (mixed effects)* 
> regression models
> that show difficulty to converge. Therefore, I seek a way of capturing
> warnings (of false convergence) inside a loop.
> 
> Inside that loop, I modify data and estimate a model. I do so 
> many times
> with slightly different modifications of the data. Next, I 
> extract some of
> the model parameters and store these in a matrix. However, as 
> some of the
> models do not converge well, some of the stored parameters 
> are extracted
> from the ill-converged models. Therefore, I seek a way of 
> automatically
> detecting whether the estimation procedure has resulted in a 
> warning, so I
> can distinguish between the well- and ill-converged models.
> 
> I have been trying to use functions as warnings(), as well as 
> using the
> object last.warning, but unfortunately to no avail.

Try withCallingHandlers(), as in the following function
with returns the value of the expression along with
any warning messages as a list:

> withWarnings
function (expr) 
{
    warnings <- character()
    retval <- withCallingHandlers(expr, warning = function(ex) {
        warnings <<- c(warnings, conditionMessage(ex))
        invokeRestart("muffleWarning")
    })
    list(Value = retval, Warnings = warnings)
}
<environment: R_GlobalEnv>

Typical usage would be:
> lapply(-1:1, function(i)withWarnings(log(i)))
[[1]]
[[1]]$Value
[1] NaN

[[1]]$Warnings
[1] "NaNs produced"


[[2]]
[[2]]$Value
[1] -Inf

[[2]]$Warnings
character(0)


[[3]]
[[3]]$Value
[1] 0

[[3]]$Warnings
character(0)

Perhaps there is some encapsulation of this already in some
package, as try() encapsulates error catching.

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com 

> 
> Although I cannot provide a reproducible example, I 
> schematically represent
> the procedure I seek to use below:
> 
> 
> for (i in 1:10)
> {
> <<modify data>>
> <<estimate model>>
> 
> <<<evaluate whether estimation produced warning>>>
> 
> <<extract model parameters, and store whether warning occured>>
> }
> 
> I hope any one can give some guidelines on how to deal with 
> warnings inside
> a loop.
> 
> With Kind regards,
> 
> Rense
> 
> 
> 
> 
> 
> *Although I use the lme4 package for that actual analysis, I sent my
> question to this mailinglist (instead of the R mixed list) 
> because I believe
> this is a general issue, rather than one associated 
> exclusively with mixed
> models.
> -- 
> View this message in context: 
> http://n4.nabble.com/warning-inside-loop-tp1011667p1011667.html
> Sent from the R help mailing list archive at Nabble.com.
> 
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide 
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
> 



More information about the R-help mailing list