Bert, At the end of my previous message I mentioned tryCatch(). I should have said withCallingHandlers(). E.g.,
> f <- function() { + warning("Hmmm") + retval <- c(1,2) + c(5,6,7) # warns about incompatible lengths in + + warning("Really?") + retval + } > options(warning.expression=NULL) # just in case it had been set > withCallingHandlers(f(), warning=function(e){ + cat("encountered warning: ", conditionMessage(e), "\n") + if (grepl("multiple of shorter", conditionMessage(e))) { recover() } + invokeRestart("muffleWarning") + }) encountered warning: Hmmm encountered warning: longer object length is not a multiple of shorter object length Enter a frame number, or 0 to exit 1: withCallingHandlers(f(), warning = function(e) { 2: f() 3: #3: .signalSimpleWarning("longer object length is not a multiple of shorter object length", quote(c(1, 2) + c(5, 6, 7))) 4: #3: withRestarts({ 5: #3: withOneRestart(expr, restarts[[1]]) 6: #3: doWithOneRestart(return(expr), restart) 7: #3: function (e) Selection: 0 encountered warning: Really? [1] 6 8 8 Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf Of William Dunlap > Sent: Wednesday, November 09, 2011 3:51 PM > To: Bert Gunter > Cc: r-help > Subject: Re: [R] Stack trace? > > 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-bounces@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. ______________________________________________ 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.