It will call recover() for each warning. When you exit recover() the code continues on. This is handy if you expect the first warning or two but are curious about the third. I'd expect that you could reset options(warning.expression=NULL) when in recover() so that recover() would not be called at the remaining warnings.
> options(warning.expression=quote(recover())) > f <- function() { + warning("Hmmm") + retval <- c(1,2) + c(5,6,7) + warning("Really?") + retval + } > f() Enter a frame number, or 0 to exit 1: f() 2: #2: warning("Hmmm") 3: #2: .signalSimpleWarning("Hmmm", quote(f())) 4: #2: withRestarts({ 5: #2: withOneRestart(expr, restarts[[1]]) 6: #2: doWithOneRestart(return(expr), restart) Selection: 0 Enter a frame number, or 0 to exit 1: f() 2: #3: .signalSimpleWarning("longer object length is not a multiple of shorter object length", quote(c(1, 2) + c(5, 6, 7))) 3: #3: withRestarts({ 4: #3: withOneRestart(expr, restarts[[1]]) 5: #3: doWithOneRestart(return(expr), restart) Selection: 1 Called from: .signalSimpleWarning("longer object length is not a multiple of shorter object length", quote(c(1, 2) + c(5, 6, 7))) Browse[1]> options(warning.expression=NULL) Browse[1]> # hit control-D Browse[1]> Enter a frame number, or 0 to exit 1: f() 2: #3: .signalSimpleWarning("longer object length is not a multiple of shorter object length", quote(c(1, 2) + c(5, 6, 7))) 3: #3: withRestarts({ 4: #3: withOneRestart(expr, restarts[[1]]) 5: #3: doWithOneRestart(return(expr), restart) Selection: 0 [1] 6 8 8 Warning message: In f() : Really? I think you could also use tryCatch(warning=function(e)...) to only call recover() at certain types of warnings, perhaps by examining the text in conditionMessage(e). Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com From: Bert Gunter [mailto:gunter.ber...@gene.com] Sent: Wednesday, November 09, 2011 3:40 PM To: William Dunlap Cc: r-help Subject: Re: [R] Stack trace? To Bill's suggestion for a stack trace on warnings: Question: What would this do in situations where one might get, e.g. 100 warnings? -- Bert On Wed, Nov 9, 2011 at 3:08 PM, William Dunlap <wdun...@tibco.com<mailto:wdun...@tibco.com>> wrote: > -----Original Message----- > From: r-help-boun...@r-project.org<mailto:r-help-boun...@r-project.org> > [mailto:r-help-boun...@r-project.org<mailto:r-help-boun...@r-project.org>] On > Behalf Of Thomas Lumley > Sent: Wednesday, November 09, 2011 1:53 PM > To: rkevinbur...@charter.net<mailto:rkevinbur...@charter.net> > Cc: r-help > Subject: Re: [R] Stack trace? > > On Thu, Nov 10, 2011 at 10:35 AM, > <rkevinbur...@charter.net<mailto:rkevinbur...@charter.net>> wrote: > > > > Currently I have a for loop executing functions and at the end I get a > > message like: > > > > There were 50 or more warnings (use warnings() to see the first 50) > > > > If I do what it says and type warnings(), I get 50 messages like: > > > > 2: In !is.na<http://is.na>(x) & !is.na<http://is.na>(rowSums(xreg)) : > > longer object length is not a multiple of shorter object length > > > > I am not sure what function these errors are originating from. I don't > > think it is from any of the 'R' script that I wrote. I would like to see > > which function is being called when this error is thrown and which > > called that . . . and so on. > > > > I have the same problem with error messages. An error is thrown but I > > don't have a call stack to help trace down the problem. Is there some > > function or technique that I could use to help get a call stack? > > traceback() gets you a stack trace at the last error > > options(warn=2) makes warnings into errors > > options(error=recover) starts the post-mortem debugger at any error, > allowing you to inspect the stack interactively. And options(warning.expression=quote(recover())) will start that same debugger at each warning. Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com<http://tibco.com> > -thomas > > -- > Thomas Lumley > Professor of Biostatistics > University of Auckland > > ______________________________________________ > R-help@r-project.org<mailto:R-help@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@r-project.org<mailto:R-help@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. -- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm [[alternative HTML version deleted]] ______________________________________________ R-help@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.