循环:跳过某种类型的错误(R)

时间:2018-07-13 00:28:54

标签: r loops error-handling skip

我正在使用以下代码: https://www.r-bloggers.com/htmltotext-extracting-text-from-html-via-xpath/ 这个问题在github上:

https://github.com/tonybreyal/Blog-Reference-Functions/blob/master/R/htmlToText/htmlToText.R

它创建一个从html提取文本的命令:

htmlToText

我有一个循环,如下所示:

for(i in 1:10000){
input <- URL[i]
txt <- htmlToText(input)
write.table(txt, file = paste0(URL[i], ".txt", sep=""))
}

当它遇到以下错误时,我希望它转到下一个我:

Error in function (type, msg, asError = TRUE)  :    "Could not resolve host: NA"

有没有办法做到这一点? 它可能会帮助许多其他人使用此代码 谢谢

1 个答案:

答案 0 :(得分:0)

对于以后的帖子,请查看如何提供minimal reproducible example/attempt;这包括清楚地说明您使用了哪些软件包。

在这里,我假设您正在使用read_html中的rvest

您可以使用tryCatch来避免退出循环。我也将for循环替换为lapply

这是一个例子

library(rvest)
URL <- c("http://asd", "http://had.co.nz");
lst <- lapply(URL, function(ss)
    result <- tryCatch(
        read_html(ss),
        error = function(e) {
            print(sprintf("Could not resolve host: %s", ss));
            return(NULL);
        }
    ))
#[1] "Could not resolve host: http://asd"

lst;
#[[1]]
#NULL
#
#[[2]]
#{xml_document}
#<html lang="en">
#[1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8 ...
#[2] <body id="page-top" class="index">\n\n<!-- Navigation -->\n<nav class="na ...