用于具有特定错误条件的循环错误处理(在R中)

时间:2017-12-13 19:12:12

标签: r for-loop error-handling while-loop try-catch

我的问题与here描述的问题非常相似,但遗憾的是我无法在我所处的特定情况下应用代码。

所以我试图下载很多网址,我正在使用for循环来完成这项工作。这就是我的循环的样子:

ids <- c("1", "3", "7", "9")

numbers <- list()
  for (jj in seq_along(ids)) {  
   numbers[[jj]] <- as.numeric(ids[jj])
      }

这适用于所有花花公子。直到我收到错误"Error: Try Again",它随机出现但如果我在同一个地方再次启动循环则可以修复。

但是,有一个不同的错误表示我使用的API密钥已过期"Error: Stop for loop",对于此错误,我需要停止循环,手动重启API密钥(不能自动无法自动执行)然后再从它停止的迭代器处重新开始。

所以为了模拟这个,我写了这个小循环:

errors <- c("Error: Try Again", "Error: Stop for loop")

numbers <- list()
  for (jj in seq_along(ids)) {  
   numbers[[jj]] <- as.numeric(ids[jj])
    if (jj == sample(1:4, 1)) stop(sample(errors, 1)) 
   #randomly stops and gives one or the other error
  }

所以这就是我想要做的事情:

  1. 每当我的for循环命中“Error:Try Again”时,我希望循环再次尝试直到它起作用。

  2. 每当我的for循环命中“Error:Stop for loop”时,我希望循环停止,这样我就可以手动修复API密钥错误。在这种情况下,我希望保存循环的结果,所以我可以在以后重新启动循环时将它们组合在一起。

  3. 不幸的是,我在写这些条件方面非常不熟练。我知道我必须以某种方式使用trytryCatch,但我无法弄清楚如何测试特定的错误消息(而不是在发生错误时)。

    感谢大家的帮助!

1 个答案:

答案 0 :(得分:1)

我觉得这样的事情很好。我将错误生成部分拉到了自己的函数中,使事情变得更模块化,更容易理解。

为了轻松&#34;尝试直到成功,#{1}}循环比while循环更有意义。我们可以for停止循环。我已经使用break跳转到循环的下一个迭代,虽然这里真的不需要它(使用它会跳过当前迭代循环中剩下的所有东西 - 但是因为那里&# 39;在next陈述之后,他们可能被遗漏了,真的没有发生任何事情。

next