如何忽略R中的错误消息并保持循环函数继续运行



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

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"}
}

问题是,如果urlbroken,我会得到这样的错误消息:

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

并且循环停止。有没有办法设置另一个if condition,使其不会停止?

正如@hrbrmstr在评论中建议的那样,我使用了tryCatch,但添加了一些小东西,这样效果会更好。使用next语句中的valid_url检查条件使循环重新开始。

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("14")  
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("14")  
cat(paste(i," - ",df$texto[[i]],"nStatus: ",
percent(i/nrow(df)),sep=""))
}

最新更新