我有一个大型 R 脚本,其中包含 142 个小部分。如果某一部分因错误而失败,我希望脚本继续而不是停止。这些部分不一定相互依赖,但有些部分确实相互依赖。如果中间的一个失败了也没关系。我不想在这个脚本中加入try()
来电。而且我不想将文件分成许多较小的文件,因为每个部分都很短。
If source()
可以像在 R 控制台上复制并粘贴一样工作,那就太好了。或者如果有一种方法可以将错误降级为警告,那也可以。
脚本运行后,我打算 grep(或类似)错误或警告文本的输出,以便我可以看到已发生的所有错误或警告,而不仅仅是它在第一个错误时停止。
我读了?source
并搜索了 Stack Overflow 的 [R] 标签。我发现了以下类似的问题,但是try
and tryCatch
是否提供了答案:
R 脚本 - 如何在错误时继续执行代码 https://stackoverflow.com/questions/8852406/r-script-how-to-continue-code-execution-on-error
有没有办法让 R 脚本在收到错误消息后继续执行而不是停止执行? https://stackoverflow.com/questions/4359310/is-there-any-way-to-have-r-script-continue-after-receiving-error-messages-instea
我不是在寻找try
or tryCatch
由于上述原因。这不适用于 R 包测试,我了解 R 包测试框架以及许多测试框架try()
or test_that()
调用(或类似的)是完全合适的。这是为了其他事情,我有一个如上所述的脚本。
Thanks!
为了更具体地说明这一点,下面怎么样?
首先,为了测试该方法,创建一个文件(将其命名为"script.R"
)包含多个语句,其中第一个语句在计算时会抛出错误。
## script.R
rnorm("a")
x <- 1:10
y <- 2*x
然后将其解析为表达式列表,并依次评估每个元素,将评估包装在对tryCatch()
这样错误就不会造成太大的损害:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)