Использование rvest с Drake: внешний указатель не является ошибкой - PullRequest
0 голосов
/ 04 апреля 2020

Когда я впервые запускаю код ниже, все в порядке. Но когда я что-то изменяю в команде 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)

Я нашел два возможных решения, но Я не энтузиаст c о них.
1. Соедините оба шага в drake_plan в один.
2. Используйте xml2::write_html() и xml2::read_html(), как предложено здесь .
Есть ли лучший способ решить это? PS Вопрос уже обсуждался здесь , Rstudio forum и github .

1 Ответ

1 голос
/ 05 апреля 2020

По умолчанию drake сохраняет цели в виде файлов RDS (другие опции здесь ). Так что https://github.com/tidyverse/rvest/issues/181#issuecomment -395064636 , который вы подняли, является именно проблемой. Мне нравится (1), потому что текст совместим с RDS. Говоря в широком смысле, пользователь должен выбрать хорошие цели, совместимые с системой хранения данных drake. См. https://books.ropensci.org/drake/plans.html#how -to-выбрать-хорошие-цели для обсуждения и ссылок на подобные проблемы. Но вы хотите go с помощью (2), вы можете вернуть путь к файлу HTML из файла dynamici c .

...