如何忽略R中的错误消息并使循环功能继续进行

时间:2018-11-07 17:36:24

标签: r

我正在使用循环函数在urls中获取一些df并进行一些验证,例如:

for (i in 1:nrow(df)) {
webpage <- read_html(as.character(df[i,1]))
Sys.sleep(0.025)
validation <- webpage %>% html_nodes("a") %>% html_attr('href')
if (length(grep("bitstream",validation)>0)) {
  df$text[[i]] <- "Valid"}
else {
  df$text[[i]] <- "Invalid"}
}

问题是如果if和urlbroken,我会收到如下错误消息:

Error in open.connection(x, "rb") : HTTP error 500

,循环停止。 有没有办法设置另一个if condition以便它不停止?

1 个答案:

答案 0 :(得分:0)

我已经按照评论中@hrbrmstr的建议使用tryCatch,但添加了一点内容,这样效果会更好。 在valid_url语句中使用next检查条件使循环重新开始。

for (i in 1:nrow(df)) {

valid_url <- TRUE

tryCatch({webpage <- read_html(as.character(df[i,1]))}, error=function(e) url_valido<<-FALSE)

if (!valid_url){ cat("\014")  
cat(paste(i," - Invalid URL","\nStatus: ",
          percent(i/nrow(df)),sep=""))
df$text[[i]] <- "Invalid URL"

next}

Sys.sleep(0.025)
teste <- webpage %>% html_nodes("a") %>% html_attr('href')
if (length(grep("bitstream",teste)>0)) {

  df$texto[[i]] <- "Completo"}
else {
  df$texto[[i]] <- "Incompleto"}
cat("\014")  
cat(paste(i," - ",df$texto[[i]],"\nStatus: ",
            percent(i/nrow(df)),sep=""))
}