[R] warning inside loop
Rense
rense.nieuwenhuis at gmail.com
Tue Jan 12 10:53:40 CET 2010
Dear William,
thank you kindly for this solution: it provides exactly what I need,
especially due to the fact that the encapsulating function returns a list,
from which I can extract all the information I need.
kind regards,
Rense Nieuwenhuis
William Dunlap wrote:
>
>> -----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.
>>
>
> ______________________________________________
> 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.
>
>
--
View this message in context: http://n4.nabble.com/warning-inside-loop-tp1011667p1011979.html
Sent from the R help mailing list archive at Nabble.com.
More information about the R-help
mailing list