R继续循环出错

时间:2016-08-04 13:14:42

标签: r

显然尝试和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的内容,但我认为我并不理解

2 个答案:

答案 0 :(得分:4)

如果您只想运行代码,则可以改为使用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循环中完成。然后发生错误,“擦除”代码块的其余部分的执行,这是第二个赋值。但是,允许循环执行继续完成。

答案 1 :(得分:4)

您可以尝试使用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
}