我正在使用循环函数在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和url
是broken
,我会收到如下错误消息:
Error in open.connection(x, "rb") : HTTP error 500
,循环停止。
有没有办法设置另一个if condition
以便它不停止?
答案 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=""))
}