[R] warning.expression?
Barry Rowlingson
B.Rowlingson at lancaster.ac.uk
Fri Sep 23 13:36:40 CEST 2005
Thomas Friedrichsmeier wrote:
> Yes, thanks for pointing it out. However, I'm actually looking for a way to
> catch all warnings in a whole (interactive) session. Can warning.expression
> be used for that?
I've just been nosing around the source code in errors.c, and it
doesn't look good.
In this function:
static void vwarningcall_dflt(SEXP call, const char *format, va_list ap)
the warning.expression 's' is called here:
cptr = R_GlobalContext;
while ( !(cptr->callflag & CTXT_FUNCTION) && cptr->callflag )
cptr = cptr->nextcontext;
eval(s, cptr->cloenv);
return;
but when the expression is null/nil the code goes on to the default
case, in which it gets the warning message from the 'call' parameter:
dcall = CHAR(STRING_ELT(deparse1(call, 0, SIMPLEDEPARSE), 0));
REprintf(_("Warning in %s : "), dcall);
So I don't see how this parameter can be available to the
warning.expression call. There may be a way, but I don't see it.
It seems a bit dumb that warning.expression functions can only say
"Hey, something a bit iffy may have ocurred, but I dont know what and I
dont know where!". Maybe there's something in that cptr->cloenv that can
tell you...
Otherwise it requires patching.
Baz
More information about the R-help
mailing list