tryCatch存储标志和存储错误发生的索引

时间:2016-10-06 13:36:10

标签: r

我真的不了解tryCatch的工作原理。特别是存储错误消息的最后一部分。 Stackoverflow上有很多关于如何使用tryCatch的帖子,但解决方案通常只是发布一条错误消息然后继续。我想存储发生错误的for循环的索引,所以我可以稍后再回到它们。我正在使用tryCatch

思考如下内容
  flag = NULL

    for(i in 1:10) { 
      do something that can cause an error
      if (error occurs) flag=c(flag,i) and move on to the next iteration
    }

理想情况下,我希望flag在错误期间存储索引。

1 个答案:

答案 0 :(得分:2)

您可能必须使用<<-分配给父环境,尽管这可能被视为不良做法。例如:

a <- as.list(1:3)
flag <- integer()
for (i in 1L:5L){
  tryCatch(
    {
      print(a[[i]])
    },
    error=function(err){
      message('On iteration ',i, ' there was an error: ',err)
      flag <<-c(flag,i)
    }
  )
}
print(flag)

返回:

[1] 1
[1] 2
[1] 3
On iteration 4 there was an error: Error in a[[i]]: subscript out of bounds

On iteration 5 there was an error: Error in a[[i]]: subscript out of bounds

> print(flag)
[1] 4 5

这有帮助吗?