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@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

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to