如何处理R中迭代过程中的错误问题?
我在处理for循环中的错误时遇到了问题 在下面的代码中,我希望将数据表刮取并集成为一个数据帧 在刮网过程中,一些地址链不起作用,刮网过程中刮刀停止并结束。 (错误位置:doc=read_html(i,编码='UTF-8') 如何继续下一个刮片过程并完成整个向量的迭代,而忽略错误链接如何处理R中迭代过程中的错误问题?,r,loops,iteration,R,Loops,Iteration,我在处理for循环中的错误时遇到了问题 在下面的代码中,我希望将数据表刮取并集成为一个数据帧 在刮网过程中,一些地址链不起作用,刮网过程中刮刀停止并结束。 (错误位置:doc=read_html(i,编码='UTF-8') 如何继续下一个刮片过程并完成整个向量的迭代,而忽略错误链接 fdata = data.frame() n = 1 for (i in data$address) { doc = read_html(i, encoding = 'UTF-8') dtable = doc
fdata = data.frame()
n = 1
for (i in data$address) {
doc = read_html(i, encoding = 'UTF-8')
dtable = doc %>%
html_table()
fdata = bind_rows(fdata, dtable)
len = length(data$address)
print(n/len*100)
n = n + 1
}
只需添加一个
try
并结合if error next
即可,例如
fdata = data.frame()
n = 1
for (i in data$address) {
doc = try(read_html(i, encoding = 'UTF-8'), silent = TRUE)
if (any(class(doc) == 'try-error')) next
dtable = doc %>%
html_table()
fdata = bind_rows(fdata, dtable)
len = length(data$address)
print(n/len*100)
n = n + 1
}
只需添加一个
try
并结合if error next
即可,例如
fdata = data.frame()
n = 1
for (i in data$address) {
doc = try(read_html(i, encoding = 'UTF-8'), silent = TRUE)
if (any(class(doc) == 'try-error')) next
dtable = doc %>%
html_table()
fdata = bind_rows(fdata, dtable)
len = length(data$address)
print(n/len*100)
n = n + 1
}
您还可以使用
可能的frompurr
返回NA
错误,构建一个函数来刮表,然后使用map\u dfr
library(purrr)
library(rvest)
read_possible <- posibly(read_html, NA)
scrape_table <- function(address) {
doc <- read_possible(address, encoding = 'UTF-8')
if (is.na(doc)) {
NA
} else {
html_table(doc)
}
}
map_dfr(data$address, scrape_table)
库(purrr)
图书馆(rvest)
阅读可能的您也可以使用可能的从purr
返回NA
关于错误,构建一个函数来刮表,然后使用map\u dfr
library(purrr)
library(rvest)
read_possible <- posibly(read_html, NA)
scrape_table <- function(address) {
doc <- read_possible(address, encoding = 'UTF-8')
if (is.na(doc)) {
NA
} else {
html_table(doc)
}
}
map_dfr(data$address, scrape_table)
库(purrr)
图书馆(rvest)
尽可能地阅读