Использование rvest с Drake: внешний указатель недействителен ошибка

Когда я впервые запускаю приведенный ниже код, все в порядке. Но когда я что-то меняю в 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(), как предлагается здесь.
Есть ли лучший способ решить эту проблему? P.S. Проблема уже обсуждалась здесь, Форум Rstudio и на github.


person mihagazvoda    schedule 04.04.2020    source источник


Ответы (1)


По умолчанию drake сохраняет цели как файлы RDS (другие параметры здесь). Итак, 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), вы можете вернуть путь к файлу HTML из динамический файл.

person landau    schedule 04.04.2020