繁体   English   中英

R继续循环出错

[英]R continue loop on error

显然尝试和trycatch不适用于这个问题! 任何替代方案?

我试图让以下示例代码工作而不实际更改任何代码

result = 0
for(i in 1:10){
  result = result + i
  log("a") #I do not care about this error
  result = result + i
}

这应该给出结果= 110

如果我实际上通过复制循环中的部分并增加计数器来手动完成它,它可以完美地工作:

result = 0

#iteration 1
i = 1
result = result + i
log("a")
result = result + i

#iteration 2
i = i+1
result = result + i
log("a")
result = result + i

#iteration 3
i = i+1
result = result + i
log("a")
result = result + i

#etc.

然而,我的真实代码有大约1000行,需要循环几百次。

所以我想有一些选择

options(on.error.just.continue.the.next.line) = TRUE

我读过关于try / tryCatch的内容,但我认为我并不理解

如果您只想运行代码,可以使用try代替:

result <- 0
for(i in 1:10){
  result = result + i
  try({log("a")}) #I do not care about this error
  result = result + i
}

log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数
log(“a”)中的错误:数学函数的非数字参数

result
[1] 110

要关闭消息,请使用

try({log("a")}, silent=TRUE)

如果您担心更大的代码块,可以将其包装在{ } ,如下所示:

result <- 0
for(i in 1:10){
  try({                # start code block
  result = result + i
  log("a")             # I do not care about this error
  result = result + i
  }, silent=TRUE)      # end of try function
}

result
[1] 55

这里,结果的第一个赋值在for循环中完成。 然后发生错误,“擦除”代码块的其余部分的执行,这是第二个赋值。 但是,允许循环执行继续完成。

您可以尝试使用try catch块:

result = 0
for (i in 1:10) {
    result = result + i
    tryCatch({
        log("a") #I do not care about this error
    }, warning = function(w) {
        # comment out the next print statement for a silent warning
        print("warning")
    }, error = function(e) {
        # comment out the next print statement for a silent error
        print("error")
    }, finally = {
        # cleanup
    }
    result = result + i
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM