I have a large R script of, say, 142 small sections. If one section fails with an error I'd like the script to continue rather than halt. The sections don't necessarily depend on each other, but some do. If one in the middle fails that's ok. I'd prefer not to pepper this script with try()
calls. And I'd prefer not to have to split the file up into many smaller files as each section is quite short.
If source()
could be made to work as if it had been copy and pasted at the R console, that would be great. Or if there was a way to downgrade error to warning, that would be fine too.
Once the script has run I intend to grep (or similar) the output for error or warning text so that I can see all the errors or warnings that have occurred, not just that it has halted on the first error.
I've read ?source
and searched Stack Overflow's [R] tag. I found the following similar questions, but try
and tryCatch
were the answers provided :
R Script - How to Continue Code Execution on Error
Is there any way to have R script continue after receiving error messages instead of halting execution?
I'm not looking for try
or tryCatch
for the reasons above. This isn't for R package testing, where I'm aware of the testing frameworks and where many try()
or test_that()
calls (or similar) are entirely appropriate. This is for something else where I have a script as described.
Thanks!
In R Programming, there are basically two ways in which we can implement an error handling mechanism. Either we can directly call the functions like stop() or warning(), or we can use the error options such as “warn” or “warning. expression”.
To make this more concrete, how about the following?
First, to test the approach, create a file (call it "script.R"
) containing several statements, the first of which will throw an error when evaluated.
## script.R rnorm("a") x <- 1:10 y <- 2*x
Then parse it into a expression list, and evaluate each element in turn, wrapping the evaluation inside a call to tryCatch()
so that errors won't cause too much damage:
ll <- parse(file = "script.R") for (i in seq_along(ll)) { tryCatch(eval(ll[[i]]), error = function(e) message("Oops! ", as.character(e))) } # Oops! Error in rnorm("a"): invalid arguments # # Warning message: # In rnorm("a") : NAs introduced by coercion x # [1] 1 2 3 4 5 6 7 8 9 10 y # [1] 2 4 6 8 10 12 14 16 18 20
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With