From mtmorgan at fhcrc.org  Sat Feb  4 16:37:19 2012
From: mtmorgan at fhcrc.org (Martin Morgan)
Date: Sat, 04 Feb 2012 07:37:19 -0800
Subject: [Rd] Resume processing after warning handler.
In-Reply-To: <CAM+LvrB21RWJJ2UcO6xaNbb5X9xUJXju04pwEJCwAt79qjdUtQ@mail.gmail.com>
References: <CAM+LvrB21RWJJ2UcO6xaNbb5X9xUJXju04pwEJCwAt79qjdUtQ@mail.gmail.com>
Message-ID: <4F2D50AF.2050801@fhcrc.org>

On 02/03/2012 02:49 AM, Titus von der Malsburg wrote:
> Dear list!
>
> I have a script that processes a large number of data files.  When one
> file fails to process correctly, I want the script to write a message
> and to continue with the next file.  I achieved this with tryCatch:
>
>    for (f in files)
>      tryCatch({heavy.lifting(f)}, error=function(e) log.error.to.file(e))
>
> I also want to log warning messages and tried something like this:
>
>    for (f in files)
>      tryCatch({heavy.lifting(f)},
>               warning=function(w) {log.warning.to.file(w)},
>               error=function(e) {log.error.to.file(e)})
>
> Unfortunately, this aborts processing when a warning is generated.  My
> question: how can I resume processing after I logged the warning as if
> nothing had happened?  My understanding of the man page is that his is
> not possible with tryCatch but I'm not sure.

Hi Titus -- use withCallingHandlers to capture the warning, and 
invokeRestart() to continue after handling it.

withCallingHandlers({
     warning('oops')
     message('continuing')
}, warning=function(w) {
     message('handling: ', conditionMessage(w))
     invokeRestart("muffleWarning")
})


>
> Thanks for any suggestions!
>
>    Titus
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel


-- 
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109

Location: M1-B861
Telephone: 206 667-2793



[Rd] Resume processing after warning handler.
Martin Morgan