【问题标题】:Using rvest with drake: external pointer is not valid error将 rvest 与 drake 一起使用:外部指针无效错误
【发布时间】:2020-04-04 16:38:19
【问题描述】:

当我第一次运行下面的代码时,一切正常。但是当我在html_file %>%... 命令中更改某些内容时,例如评论tolower(),我收到以下错误:

Error: target title failed.
diagnose(title)error$message:
  external pointer is not valid
diagnose(title)error$calls:
   1. └─html_file %>% html_nodes("h2") %>% html_text()

代码:

library(rvest)
library(drake)

some_string <- '
  <div class="main">
      <h2>A</h2>
      <div class="route">X</div>
  </div> 
'

html_file <- read_html(some_string)
title <- html_file %>% 
  html_nodes("h2") %>% 
  html_text()

plan <- drake_plan(
  html_file = read_html(some_string),
  title = html_file %>% 
    html_nodes("h2") %>% 
    html_text() %>% 
    tolower()
)

make(plan)

我找到了两种可能的解决方案,但我对它们不感兴趣。
1.将drake_plan中的两个步骤合二为一。
2. 使用xml2::write_html() 和xml2::read_html() 建议here。
有没有更好的方法来解决它? 附:问题已经在here、Rstudio forum 和github 上讨论过。

【问题讨论】:

    标签: rvest drake-r-package


    【解决方案1】:

    默认情况下,drake 将目标保存为 RDS 文件(其他选项 here)。因此,您提出的https://github.com/tidyverse/rvest/issues/181#issuecomment-395064636 正是问题所在。我喜欢(1),因为文本与 RDS 兼容。从广义上讲,由用户选择与drake 的数据存储系统兼容的好目标。有关类似问题的讨论和链接,请参阅 https://books.ropensci.org/drake/plans.html#how-to-choose-good-targets。但是您想使用 (2),您可以从 dynamic file 中返回 HTML 文件的文件路径。

    【讨论】:

      猜你喜欢
      • 2019-10-09
      • 2021-03-09
      • 1970-01-01
      • 2012-06-06
      • 2019-09-03
      • 1970-01-01
      • 2022-11-11
      • 2017-09-16
      • 2016-08-08
      相关资源
      最近更新 更多