在出现错误消息后重新启动for循环

时间:2018-01-11 16:51:26

标签: r for-loop runtime-error relaunch

我在互联网上下载数据,并在循环中插入了 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循环的命令

感谢您的帮助

2 个答案:

答案 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

    }
  )

}