首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R continue循环出错

R continue循环出错
EN

Stack Overflow用户
提问于 2016-08-04 21:14:42
回答 2查看 11.1K关注 0票数 5

显然,try和trycatch对这个问题不起作用!有其他解决方案吗?

我正在尝试让下面的示例代码正常工作,而不实际更改任何代码

代码语言:javascript
复制
result = 0
for(i in 1:10){
  result = result + i
  log("a") #I do not care about this error
  result = result + i
}

结果应该是result = 110

如果我真的手动复制循环中的部分并增加计数器,它就能完美地工作:

代码语言:javascript
复制
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行,需要循环几百次。

所以我想有一些选择

代码语言:javascript
复制
options(on.error.just.continue.the.next.line) = TRUE

我读过关于try/tryCatch的文章,但我想我不能正确理解它

EN

回答 2

Stack Overflow用户

发布于 2016-08-04 21:18:55

如果你只想让代码运行,你可以改用try

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

日志中的

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

日志中出错(“a”):数学函数的非数字参数

日志中出错(“a”):数学函数的非数字参数

日志中出错(“a”):数学函数的非数字参数

日志中出错(“a”):数学函数的非数字参数

日志中出错(“a”):数学函数的非数字参数

日志中出错(“a”):数学函数的非数字参数

日志中出错(“a”):数学函数的非数字参数

日志中出错(“a”):数学函数的非数字参数

日志中出错(“a”):数学函数的非数字参数

代码语言:javascript
复制
result
[1] 110

要关闭该消息,请使用

代码语言:javascript
复制
try({log("a")}, silent=TRUE)

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

代码语言:javascript
复制
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循环中完成。然后发生错误,“清除”其余代码块的执行,这是这里的第二个赋值。但是,允许循环执行通过完成继续执行。

票数 8
EN

Stack Overflow用户

发布于 2016-08-04 21:19:31

您可以尝试使用try catch块:

代码语言:javascript
复制
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
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38768398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档