виньетки.rmd не появляются с виньеткой()

В пакете, который я разрабатываю с помощью R Studio, я создаю виньетки через devtools::use_vignette("mydoc.Rnw"), который дает стандартный заголовок виньетки, например

---
title: "Title"
author: "Michael Friendly"
date: "'r Sys.Date()'"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Title}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

Я выполнил все инструкции в http://yihui.name/knitr/demo/vignette/ и http://r-pkgs.had.co.nz/vignettes.html. Виньеток перечислены на странице CRAN для пакета, но они кажутся недоступными в R сессии с пакетом загруженным.

 > browseVignettes("matlib")
 No vignettes found by browseVignettes("matlib") 

> library(tools)
> names(vignetteEngine(package = 'matlib'))
Error in getEngine(name, package) : 
  None of packages ‘matlib have registered vignette engines

Я знаю, что из пакета доступны другие пакеты с knitr -processed.Rmd, но не могут понять, почему мои нет. Чего не хватает?

Мой каталог vignettes vignettes/ содержит только файлы.Rmd (без файлов PDF), но это похоже на, например, https://github.com/yihui/knitr/tree/master/vignettes.

Ответ 1

Примечание devtools не создает виньетки по умолчанию, когда devtools::install() (то же самое для некоторых функций install_* таких как install_github()), из каталога. При установке пакета необходимо указать аргумент build_vignettes = TRUE. В настоящее время нет способа создать виньетки с помощью devtools, если вы просто используете кнопку RStudio Build & Reload. Вам нужно Build Source Package и запустить R CMD INSTALL на tarball. Или запустите devtools::install(build_vignettes = TRUE) в консоли R.

Ответ 2

Ну, я нахожу темную магию, которая может обойти эту ситуацию.

Из Configure Build Tools..., RStudio позволяет нам настраивать параметры для R CMD INSTALL при нажатии кнопки " Build & Reload. В текущей реализации он ведет себя как запуск R CMD INSTALL [options] pkg в родительском каталоге каталога пакетов. Оказывается, что эти параметры могут быть произвольными строками, в том числе ; , что позволяет нам запускать команды bash.

Например, мы можем указать -v; cd pkg; cp vignettes/*html inst/doc; R CMD INSTALL --no-multiarch --with-keep.source.; echo -v; cd pkg; cp vignettes/*html inst/doc; R CMD INSTALL --no-multiarch --with-keep.source.; echo

Таким образом, -v аннулирует RStudio R CMD INSTALL. Затем мы можем скопировать построенные html файлы в vignette/ в inst/doc/ до того, как мы установим пакет, используя наш собственный R CMD INSTALL. (cd pkg; освобождает нас от имени типа пакета несколько раз в последующих командах. echo аннулирует имя пакета, добавленное RStudio.

Я знаю, что в этом трюке есть много недостатков, таких как имя пакета жесткого кодирования, которое подвержено ошибкам, если имя пакета изменено последним.

Используйте его на свой страх и риск.

Надежда RStudio скоро выйдет из элегантного решения.