首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中处理迭代过程中的错误问题?

如何在R中处理迭代过程中的错误问题?
EN

Stack Overflow用户
提问于 2019-01-21 19:32:53
回答 2查看 31关注 0票数 0

我在处理for循环中的错误时遇到了一个问题。

在下面的代码中,我想要抓取数据表并将其集成为一个数据帧。

在web抓取过程中,某些地址链接不起作用,web抓取会在抓取过程中停止和结束。(错误位置: doc = read_html(i,encoding = 'UTF-8') )

我如何继续下一步的抓取过程并完成对整个向量的迭代,而忽略错误链接?

代码语言:javascript
复制
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
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-21 19:40:59

只需添加一个结合了if error nexttry就可以了,例如

代码语言:javascript
复制
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
}
票数 1
EN

Stack Overflow用户

发布于 2019-01-21 20:18:50

您还可以使用purrr中的possibly在出错时返回NA,构建一个函数来搜索表,然后使用map_dfr进行迭代和绑定

代码语言:javascript
复制
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)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54289091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档