【发布时间】:2018-05-27 18:51:56
【问题描述】:
我的问题与here 所描述的非常相似,但不幸的是我无法在我所处的特定情况下应用代码。
所以我正在尝试下载许多 URL,并且我正在使用 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
}
这就是我想要做的:
每当我的 for 循环遇到“错误:再试一次”时,我希望循环再试一次,直到它工作为止。
每当我的 for 循环遇到“错误:停止 for 循环”时,我希望循环停止,以便手动修复 API 密钥错误。在这种情况下,我希望保存循环的结果,以便稍后在重新启动循环时将它们绑定在一起。
不幸的是,我在编写这些条件时非常不熟练。我知道我必须以某种方式使用try 或tryCatch,但我无法弄清楚如何测试特定的错误消息(而不是是否发生错误)。
感谢大家的帮助!
【问题讨论】:
-
这只是一个说明,因为我的实际循环代码需要这些包,我想要一个简单的可重现示例来传达这个想法
-
有道理,在仔细阅读您的问题后,我认为是这样。
标签: r for-loop error-handling while-loop try-catch