gpt4 book ai didi

r - 使用 tryCatch 在出错时跳到循环的下一个值?

转载 作者:行者123 更新时间:2023-12-03 05:47:52 25 4
gpt4 key购买 nike

我已经阅读了一些有关 tryCatch 和 cuzzins 的其他问题以及文档:

但是我还是不明白。

我正在运行一个循环,如果发生任何一种错误,我想跳到下一步:

for (i in 1:39487) {

# EXCEPTION HANDLING
this.could.go.wrong <- tryCatch(
attemptsomething(),
error=function(e) next
)
so.could.this <- tryCatch(
doesthisfail(),
error=function(e) next
)

catch.all.errors <- function() { this.could.go.wrong; so.could.this; }
catch.all.errors;


#REAL WORK
useful(i); fun(i); good(i);

} #end for

(顺便说一句,我找不到 next 的文档)

当我运行此命令时,R 鸣响:

Error in value[[3L]](cond) : no loop for break/next, jumping to top level

我在这里缺少什么基本点? tryCatch 显然位于 for 循环内,那么为什么 R 不知道这一点呢?

最佳答案

使用tryCatch的关键是意识到它返回一个对象。如果 tryCatch 内部出现错误,则该对象将从类 error 继承。您可以使用函数inherit测试类继承。

x <- tryCatch(stop("Error"), error = function(e) e)
class(x)
"simpleError" "error" "condition"

编辑:

参数error = function(e) e的含义是什么?这让我感到困惑,我认为文档中没有很好地解释这一点。发生的情况是,此参数捕获源自您正在 tryCatching 的表达式的任何错误消息。如果捕获到错误,则会将其作为 tryCatch 的值返回。在帮助文档中,这被描述为调用处理程序error=function(e) 中的参数 e 是源自代码的错误消息。

<小时/>

我来自旧式的过程编程,其中使用 next 是一件坏事。所以我会重写你的代码,如下所示。 (请注意,我删除了 tryCatch 中的 next 语句。):

for (i in 1:39487) {
#ERROR HANDLING
possibleError <- tryCatch(
thing(),
error=function(e) e
)

if(!inherits(possibleError, "error")){
#REAL WORK
useful(i); fun(i); good(i);
}

} #end for
<小时/>

函数 next 记录在 ?for` 中。

如果您想使用它而不是将主要工作例程放在 if 中,您的代码应如下所示:

for (i in 1:39487) {
#ERROR HANDLING
possibleError <- tryCatch(
thing(),
error=function(e) e
)

if(inherits(possibleError, "error")) next

#REAL WORK
useful(i); fun(i); good(i);

} #end for

关于r - 使用 tryCatch 在出错时跳到循环的下一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8093914/

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