From phgrosjean at sciviews.org  Thu Feb  5 15:40:41 2009
From: phgrosjean at sciviews.org (Philippe Grosjean)
Date: Thu, 05 Feb 2009 15:40:41 +0100
Subject: [Rd] Capturing all warnings (with messages)
In-Reply-To: <alpine.DEB.1.00.0902042014020.16087@luke-inspiron>
References: <1F999E4C-B39B-46B4-92BC-074EFEE4B1E8@ucl.ac.uk><f8e6ff050902041428u69dccc81p3fb44ef688a7068b@mail.gmail.com>	<68e086180902041631l4c560ce8j19506f08172c765@mail.gmail.com>	<77EB52C6DD32BA4D87471DCD70C8D7009C8E2E@NA-PA-VBE03.na.tibco.com>
	<alpine.DEB.1.00.0902042014020.16087@luke-inspiron>
Message-ID: <498AFA69.3020508@sciviews.org>

Hello,

There is a function captureAll() in the svMisc package on CRAN. Although 
in its current version, it simulates textual output you got at the 
console, it should be rather easy to modify it to return separately 
output, errors and warnings. There is one point to consider: the 
function cannot catch some output from c code, and it does not work well 
with R code needing interaction at the console, like browser() for 
instance. For the rest, its handling of output (visible versus invisible 
output) and of warnings, including management of options(warn = ) is 
very similar to what is done at the console.
Best,

Philippe
..............................................<?}))><........
  ) ) ) ) )
( ( ( ( (    Prof. Philippe Grosjean
  ) ) ) ) )
( ( ( ( (    Numerical Ecology of Aquatic Systems
  ) ) ) ) )   Mons-Hainaut University, Belgium
( ( ( ( (
..............................................................

luke at stat.uiowa.edu wrote:
> Kurt Hornik and I have discussed off an on a mechanism for setting
> default condition handlers.  So far we haven't come up with anything
> satisfactory but we may yet.  In some ways this would be easier if the
> top level was written in R, along the lines of .Program, so I've
> played around with that a bit, but not to the point where it is usable
> in production yet.
> 
> luke
> 
> On Wed, 4 Feb 2009, William Dunlap wrote:
> 
>> In SV3 (or Splus prior to 5.0) one could redefine
>> the .Program expression, which
>> by default was close to print(eval(parse(stdin())) along
>> with some extras like printing warnings and errors in
>> certain ways and recording input in a .Audit file.   I
>> once wrote toy .Programs that used select() to
>> listen for data arriving on a socket and for commands
>> from stdin.  The data would be appended to a certain
>> dataset as it arrived and the user could ask to replot
>> it whenever he wanted.  You could use options("warning.expression")
>> and try() to present warnings and errors to the user in
>> whatever way you wanted.  I think it was used in old
>> versions of Splus on Windows to implement the connection
>> to the GUI.
>>
>> Is this the sort of functionality you are looking for?
>>
>> If you are writing a front-end for R the .Program is not
>> needed, as your front end can easily wrap boilerplate,
>> like eval.with.details, around whatever text the user types in.
>>
>>
>> Bill Dunlap
>> TIBCO Software Inc - Spotfire Division
>> wdunlap tibco.com
>>
>>> -----Original Message-----
>>> From: r-devel-bounces at r-project.org
>>> [mailto:r-devel-bounces at r-project.org] On Behalf Of Jon Clayden
>>> Sent: Wednesday, February 04, 2009 4:31 PM
>>> To: hadley wickham
>>> Cc: R-devel at r-project.org
>>> Subject: Re: [Rd] Capturing all warnings (with messages)
>>>
>>> Jeff, Hadley,
>>>
>>> Many thanks for your responses. The eval.with.details package sounds
>>> interesting and I'll certainly take a closer look, but it still seems
>>> to me that these approaches are focussed on trapping warnings within
>>> specific snippets of code rather than changing the way all warnings
>>> (including those in standard packages) are reported.
>>>
>>> This ability would surely be useful anytime that you wish to change
>>> the reporting of warnings from the default. Say, for example, that you
>>> wanted to include a timestamp with each warning message. You'd do it,
>>> I would expect, by writing a function that checks the time and formats
>>> the message appropriately. This is the kind of thing I'm after -- I
>>> hope this clarifies things a bit more.
>>>
>>> The warn.expression option *appears* to provide a way to do what I
>>> want, but because the warning is not passed to the expression (or so
>>> it seems), and last.warning is not set before the expression is
>>> evaluated, the expression can only know that *some* warning condition
>>> has been raised, not *which* one. Perhaps there is a reason that
>>> last.warning cannot be set first (?), but this limits the usefulness
>>> of the option.
>>>
>>> Jon
>>>
>>> 2009/2/4 hadley wickham <h.wickham at gmail.com>:
>>>> Hi Jon,
>>>>
>>>> I have an in-development package that attempts to do this.  It's
>>>> called eval.with.details and is available from
>>>> http://github.com/hadley/eval.with.details.  As you might
>>> guess, it's
>>>> a version of eval that captures all details like messages, warnings,
>>>> errors and output so you can do whatever you want with them.  It
>>>> captures them in the way Jeff Horner describes - but there are a lot
>>>> of fiddly details to get right.
>>>>
>>>> Unfortunately there isn't any documentation yet, but the majority of
>>>> what you're interested in is present in eval.r.  The code has been
>>>> fairly well tested - I'm using it in my own implementation
>>> of a sweave
>>>> like system.
>>>>
>>>> Hadley
>>>>
>>>> On Wed, Feb 4, 2009 at 6:59 AM, Jon Clayden
>>> <j.clayden at ucl.ac.uk> wrote:
>>>>> 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/
>>>>>
>>>>> ______________________________________________
>>>>> R-devel at r-project.org mailing list
>>>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>>>
>>>>
>>>>
>>>>
>>>> -- 
>>>> http://had.co.nz/
>>>>
>>>> ______________________________________________
>>>> R-devel at r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>>
>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>



[Rd] Capturing all warnings (with messages)
Philippe Grosjean