gpt4 book ai didi

r - 有没有办法到 `source()` 并在错误后继续?

转载 作者:行者123 更新时间:2023-12-01 17:31:11 26 4
gpt4 key购买 nike

我有一个大型 R 脚本,其中包含 142 个小部分。如果某一部分因错误而失败,我希望脚本继续而不是停止。这些部分不一定相互依赖,但有些部分确实相互依赖。如果中间的一个失败了也没关系。我不想在这个脚本中添加 try() 调用。而且我不想将文件分割成许多较小的文件,因为每个部分都很短。

如果 source() 可以像在 R 控制台上复制并粘贴一样工作,那就太好了。或者如果有一种方法可以将错误降级为警告,那也可以。

脚本运行后,我打算 grep(或类似)错误或警告文本的输出,以便我可以看到已发生的所有错误或警告,而不仅仅是它在第一个错误时停止。

我已阅读 ?source 并搜索了 Stack Overflow 的 [R] 标签。我发现了以下类似的问题,但 trytryCatch 是提供的答案:

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?

出于上述原因,我不是在寻找 trytryCatch。这不适用于 R 包测试,我知道其中的测试框架,并且许多 try()test_that() 调用(或类似)是完全合适的。这是为了其他事情,我有一个如上所述的脚本。

谢谢!

最佳答案

为了让这个更具体,下面怎么样?

首先,为了测试该方法,创建一个包含多个语句的文件(称为“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

关于r - 有没有办法到 `source()` 并在错误后继续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14612190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com