From j.clayden at ucl.ac.uk  Wed Feb  4 13:59:59 2009
From: j.clayden at ucl.ac.uk (Jon Clayden)
Date: Wed, 4 Feb 2009 12:59:59 +0000
Subject: [Rd] Capturing all warnings (with messages)
Message-ID: <1F999E4C-B39B-46B4-92BC-074EFEE4B1E8@ucl.ac.uk>

Dear all,

For an open-source project that I'm working on (1), which uses R for  
all its heavy lifting but includes a wrapper shell script, I was  
hoping to find a way to capture all warnings (and, in fact, errors  
too), and handle them in my own way. I realise I can do this for a  
single expression using something like:

 > f <- function(w) print(w$message)
 > withCallingHandlers(warning("Test"),warning=f)
[1] "Test"
Warning message:
In withCallingHandlers(warning("Test"), warning = f) : Test

But I would like to capture all warnings, globally. The  
"warning.expression" option doesn't seem to allow an argument, and I  
can't seem to use "last.warning" to get at the message either:

 > g <- function() print(last.warning$message)
 > options(warning.expression=quote(g()))
 > warning("Test2")
NULL

Could anyone tell me whether there's a way to do this, please? An old  
thread on this topic seemed to go unresolved (2), and I've skimmed  
RNEWS and I don't see anything about this since then.

 > sessionInfo()
R version 2.8.1 (2008-12-22)
i386-apple-darwin8.11.1

locale:
en_GB.UTF-8/en_US.UTF-8/C/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  splines   methods
[8] base

other attached packages:
[1] tractor.session_1.0.0   tractor.base_1.0.3      tractor.nt_1.0.2

loaded via a namespace (and not attached):
[1] tools_2.8.1

Regards,
Jon


(1) http://code.google.com/p/tractor/
(2) http://finzi.psych.upenn.edu/R/Rhelp02/archive/61872.html


--
Jonathan D. Clayden, Ph.D.
Research Fellow
Radiology and Physics Unit
UCL Institute of Child Health
30 Guilford Street
LONDON  WC1N 1EH
United Kingdom

t | +44 (0)20 7905 2708
f | +44 (0)20 7905 2358
w | www.homepages.ucl.ac.uk/~sejjjd2/



[Rd] Capturing all warnings (with messages)
Jon Clayden