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.berton@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 <wdunlap@tibco.com<mailto:wdunlap@tibco.com>> wrote:
> -----Original Message-----
> From: r-help-bounces@r-project.org<mailto:r-help-bounces@r-project.org> [mailto:r-help-bounces@r-project.org<mailto:r-help-bounces@r-project.org>] On Behalf Of Thomas Lumley
> Sent: Wednesday, November 09, 2011 1:53 PM
> To: rkevinburton@charter.net<mailto:rkevinburton@charter.net>
> Cc: r-help
> Subject: Re: [R] Stack trace?
>
> On Thu, Nov 10, 2011 at 10:35 AM,  <rkevinburton@charter.net<mailto:rkevinburton@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]]

