Как игнорировать сообщение об ошибке в R и поддерживать работу цикла - PullRequest
0 голосов
/ 07 ноября 2018

Я использую функцию цикла, чтобы получить 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"}
}

Проблема в том, что если url равно broken, я получаю сообщение об ошибке, подобное этому:

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

и цикл останавливается. Есть ли способ установить другой if condition, чтобы он не останавливался?

1 Ответ

0 голосов
/ 08 ноября 2018

Я использовал tryCatch, как @hrbrmstr предложил в комментариях, но добавил кое-что, чтобы оно работало лучше. Использование условия проверки 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=""))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...