Сбой сборки пакета, потому что виньетка не находит дочерние Rmd-файлы - PullRequest
0 голосов
/ 28 апреля 2018

Я модулировал свой файл Rmd виньетки, используя куски child, чтобы иметь возможность повторно использовать дочерние файлы Rmd в других документах Rmd.

Сбой сборки пакета (в RStudio и с R CMD build .) с этим сообщением об ошибке:

** installing vignettes
   ‘Vignette.Rmd’ using ‘UTF-8’ 
Warning in readLines(if (is.character(input2)) { :
  cannot open file 'child_doc.Rmd': No such file or directory
Quitting from lines 10-11 (child_doc.Rmd) 
Error in readLines(if (is.character(input2)) { : 
  cannot open the connection
ERROR: installing vignettes failed

Как мне собрать свой пакет (чтобы R нашел мои дочерние Rmd-файлы)?

Примеры файлов Rmd:

Vignette.Rmd

---
title: "title"
author: "me"
date: "`r Sys.Date()`"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{title}
  %\VignetteEngine{rmarkdown::render}
  %\VignetteEncoding{UTF-8}

main doc

```{r child = "child_doc.Rmd"}
```

child_doc.Rmd:

# This is from the child doc
lorem ipsum

Обновление 1:

https://stackoverflow.com/a/49463061/4468078 указывает, что RStudio создает виньетки с папкой пакета в качестве root (что может объяснить, почему файлы не найдены).

Обновление 2:

Если вы создали минимальный воспроизводимый пример пакета вместе со сводкой результатов на github:

https://github.com/aryoda/R_pkg_knitr_child_vignette_issue

Обновление 3:

Я открыл проблему на knitr (https://github.com/yihui/knitr/issues/1540), но @ user2554330 определил пространство имен tools как одну из причин проблем ...

Обновление 4:

См. Запись об ошибке в bugzilla, открытую Дунканом Мердоком: https://bugs.r -project.org / bugzilla3 / show_bug.cgi? Id = 17416

1 Ответ

0 голосов
/ 29 апреля 2018

Это похоже на ошибку (или может быть больше, чем один). Я бы назвал это ошибкой в ​​R, но это может быть ошибка в knitr. При сборке архива R копирует основной файл в inst/doc, но не в дочерний файл. knitr затем смотрит на него, и так как он не видит ребенка, он уходит.

Чтобы получить пакет для сборки, вам просто нужен пустой файл в inst/doc с тем же именем, что и дочерний файл. Но этого недостаточно, чтобы пройти проверку.

При проверке пакета R увидит, что дочерний файл находится в inst/doc, и расстроится, потому что это неправильная виньетка. Так что вам нужно обмануть R, думая, что он один.

Насколько я вижу, существует простой (хотя и некрасивый) способ обхода. Просто поместите файл с именем child_doc.Rmd в каталог inst/doc. Чтобы заставить R думать, что это виньетка, скопируйте строки

  %\VignetteIndexEntry{title}
  %\VignetteEngine{rmarkdown::render}
  %\VignetteEncoding{UTF-8}

из основного файла. В противном случае содержимое кажется неактуальным, поэтому я бы не стал больше ничего там размещать.

Поместите настоящий файл child_doc.Rmd в каталог vignettes. Я думаю, что если вы сделаете это, ваш пакет будет собран и проверен без ошибок.

Это, вероятно, стоит сообщения об ошибке, но я не уверен, что исправление должно быть. Возможно, knitr должен быть более терпимым при проверке, или, возможно, R должен скопировать файл раньше.

Жаль, что обходной путь настолько уродлив, и, вероятно, вызовет другие проблемы, как только ошибка будет исправлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...