【发布时间】:2015-07-10 17:40:10
【问题描述】:
我正在 R 中运行一个大的 for 循环(不幸的是)。有很多随机错误不断出现。是否有一个通用代码可以放入 for 循环中,以便在发生任何类型的错误时跳到下一次迭代?谢谢。如果您向我提供可以复制和粘贴的代码,我将不胜感激,因为这超出了我的想象。
【问题讨论】:
标签: r error-handling try-catch
我正在 R 中运行一个大的 for 循环(不幸的是)。有很多随机错误不断出现。是否有一个通用代码可以放入 for 循环中,以便在发生任何类型的错误时跳到下一次迭代?谢谢。如果您向我提供可以复制和粘贴的代码,我将不胜感激,因为这超出了我的想象。
【问题讨论】:
标签: r error-handling try-catch
loop.vals <- 1:6
success <- logical(length(loop.vals))
for(i in loop.vals)
if(
!inherits(
try({
if(i %% 2) stop("Random Error")
cat("Success", i, "\n")
}, silent=TRUE), # as per RHertel
"try-error"
) ) success[[i]] <- TRUE
生产:
Success 2
Success 4
Success 6
然后
cat("Failures: ", which(!success))
# Failures: 1 3 5
旧答案
当然,您可以只try 整个循环的内容。这里我们用一个循环来说明,每个奇数都失败
for(i in 1:6) try({
if(i %% 2) stop("Random Error")
cat("Success", i, "\n")
})
生产:
Error in try({ : Random Error
Success 2
Error in try({ : Random Error
Success 4
Error in try({ : Random Error
Success 6
【讨论】:
try( (..whatever may cause trouble...), silent=TRUE)继续循环
Warning message: In sqrt(diag(se)) : NaNs produced 有没有办法让它跳过产生此警告(或一般警告)的迭代以及错误?谢谢。
options(warn=2);这会将警告变成错误,然后按照您的意愿工作。完成后请记住将其关闭 (options(warn=0))。否则你可以使用tryCatch,但我不会在这里讨论。