如何解决R 无法尝试捕获多个错误
我想在超时错误中捕获无效输入错误。我写的脚本如下。但是,超时在这种情况下不起作用并且程序永远运行。任何人都可以请检查并告诉我如何解决它?谢谢。
for (lb in 1:100) {
rs <- tryCatch(
expr = {
cat("helloworld","\n");
withTimeout({
rs_son = tryCatch(
expr = {
flag = FALSE
cat("start solnl","\n");
ret = solnl(X,objfun = obj,confun = con,lb=lb,ub=ub);
cat("finish solnl","\n");
},error = function(e) {flag <- TRUE}
)
if(flag) {next}
},timeout = 10)
},TimeoutException = function(ex) {
cat("Timeout. Skipping.\n")
}
)
}
更清楚地说,这就是我想要实现的目标。无论这是 Solnl 函数的无效输入错误还是超时错误,for 循环都应该继续。
解决方法
这里有多个问题。第一,没有循环调用next,第二,flag
只定义在错误处理函数内部,不在tryCatch()
之外,第三,外面的tryCatch()
在这里没有影响。
我添加了一些进一步的 cat
消息,希望能阐明正在发生的事情
编辑:用适当的 for 循环更新了答案
set.seed(0)
rs <- character()
for (lb in 1:10) {
rs[lb] <- R.utils::withTimeout({
rs_son = tryCatch(
expr = {
flag <- FALSE # has no impact
Sys.sleep(sample(0:2,size = 1))
cat("start solnl","\n")
ret = solnl(X,objfun = obj,confun = con,lb=lb,ub=ub)
cat("finish solnl","\n")
},error = function(e) {
cat(as.character(e))
flag <- TRUE # equals return(TRUE)
}
)
if(rs_son) {
return("NEXT OUT")
}
return("OUT")
},timeout = 1)
}
#> Error in Sys.sleep(sample(0:2,size = 1)): reached elapsed time limit
#> start solnl
#> Error in solnl(X,lb = lb,ub = ub): could not find function "solnl"
#> Error in Sys.sleep(sample(0:2,size = 1)): reached elapsed time limit
#> Error in Sys.sleep(sample(0:2,ub = ub): could not find function "solnl"
#> start solnl
#> Error in solnl(X,ub = ub): could not find function "solnl"
rs
#> [1] "NEXT OUT" "NEXT OUT" "NEXT OUT" "NEXT OUT" "NEXT OUT" "NEXT OUT"
#> [7] "NEXT OUT" "NEXT OUT" "NEXT OUT" "NEXT OUT"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。