tlumley@u.washington.edu
2002-May-17 21:04 UTC
[Rd] Re: [R] options()$warn==2 and try() (PR#1570)
> > I have a function called FitModels(), which simply takes in the > names of a data.frame and two variable names within that data.frame, and > fits and returns a list of objects from 2 coxph() fits, one main effects and > one interaction model. Sometimes the two variables are such that there is a > warning message: convergence has not been reached, or the X matrix is > singular, or some such.In fact the warning that the convergence may not have been reached in coxph is usually spurious, so you probably don't want to catch it. However, there does seem to be something strange going on. Simplified version f<-function(){ x<-try(warning("a")) y<-try(warning("b")) list(x,y) }> options(warn=2) > f()Error in try(warning("a")) : (converted from warning) a [[1]] [1] "Error in try(warning(\"a\")) : (converted from warning) a\n" attr(,"class") [1] "try-error" [[2]] [1] "b"> f()[[1]] [1] "a" [[2]] [1] "b" Or even more simply> options(warn=2) > try(warning("Danger, Will Robinson"))Error in try(warning("Danger, Will Robinson")) : (converted from warning) Danger, Will Robinson> try(warning("Danger, Will Robinson")) > try(warning("Danger, Will Robinson")) > warnings()Error in warnings() : Object "last.warning" not found> try(warning("Danger, Will Robinson"))Error in try(warning("Danger, Will Robinson")) : (converted from warning) Danger, Will Robinson> try(warning("Danger, Will Robinson")) > try(warning("Danger, Will Robinson"))-thomas Thomas Lumley Asst. Professor, Biostatistics tlumley@u.washington.edu University of Washington, Seattle -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
Even try() isn't really involved. The problem is in src/errors.c:warningcall It sets a flag inWarning, presumably to ensure that infinite loops of recursive warnings don't happen, but if options(warn)==2 then an error is signalled and the flag is not cleared until the next error. -thomas -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._