我在互联网上下载数据,并在循环中插入了 download.file 功能。我的循环看起来像这样:
for (i in 1:9999999) {
download.file(paste("website_path",file[i],sep = ""),
paste("home_path", file_name[i], sep = ""),
mode="wb")
}
效果很好,但有时会出现错误信息。当我手动重新启动循环时,会再次出现错误消息,但对于另一个文件(此次已下载出现错误消息的前一个文件)
因此,我正在寻找一个允许我在错误消息
后自动重新启动for循环的命令感谢您的帮助
答案 0 :(得分:1)
您是否考虑在循环中使用try(download.file(...))
?例如:
func <- function(i){if(i==3||i==7) (stop("no 3 or 7")) else(i)} #returns errors for 3 or 7
for(i in 1:10)(print(func(i)))
#[1] 1
#[1] 2
# Error in func(i) : no 3 or 7
for(i in 1:10)(try(print(func(i))))
#[1] 1
#[1] 2
#Error in func(i) : no 3 or 7
#[1] 4
#[1] 5
#[1] 6
#Error in func(i) : no 3 or 7
#[1] 8
#[1] 9
#[1] 10
答案 1 :(得分:1)
考虑将方法包装在tryCatch
中以捕获任何引发的警告或错误。如果使用不同的return()
,您甚至可以进行各种处理。
for (i in 1:9999999) {
url <- paste0("website_path", file[i])
home <- paste0("home_path", file_name[i])
tryCatch({
download.file(url, home, mode="wb")
}, warning = function(w) {
print(paste("WARNING for", url, " :" w))
# ... other needed warning handler
}, error = function(e) {
print(paste("ERROR for", url, " :" e))
# ... other needed error handler
}
)
}