在我使用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
处理过的.Rmd插图的软件包可以从软件包中访问,但无法弄清楚为什么我的不是。
缺什么?
我的vignettes/
目录只包含.Rmd文件(没有PDF),但这似乎与https://github.com/yihui/knitr/tree/master/vignettes相同。
答案 0 :(得分:27)
注意 devtools 默认情况下,当devtools::install()
(某些install_*
函数(如install_github()
)与目录中的包相同时,默认情况下不会构建小插图。安装程序包时必须指定参数build_vignettes = TRUE
。目前,如果您只使用RStudio按钮Build & Reload
,则无法使用 devtools 构建小插图。您必须Build Source Package
,并在tarball上运行R CMD INSTALL
。或者在R控制台中运行devtools::install(build_vignettes = TRUE)
。
答案 1 :(得分:2)
好吧,我找到了一种可以解决这种情况的黑暗魔法。
从Configure Build Tools...
,当您点击R CMD INSTALL
按钮时,RStudio可让我们为Build & Reload
自定义选项。在当前实现中,它的行为类似于在程序包目录的 parent 目录中运行R CMD INSTALL [options] pkg
。
事实证明,这些选项可以是任意字符串,甚至包括;
,因此我们可以运行bash命令。
例如,我们可以指定-v; cd pkg; cp vignettes/*html inst/doc; R CMD INSTALL --no-multiarch --with-keep.source .; echo
通过这种方式,-v
使RStudio的R CMD INSTALL
无效。然后,我们可以在使用我们自己的vignette/
安装软件包之前,将inst/doc/
中构建的html文件复制到R CMD INSTALL
。 (cd pkg;
在后续命令中多次从类型包名称中解放出来。echo
使RStudio附加的包名无效。
我知道这个技巧有很多缺点,例如硬编码包名,如果包名改变后者,则容易出错。
希望RStudio很快就会成为一个优雅的解决方案。使用它需要您自担风险。
答案 2 :(得分:0)
最后,使用devtools::install(build_vignettes = TRUE)
可以解决渐晕问题:browseVignettes("mypackage")
可以正常工作。但是每次我尝试打开帮助文件?myfunction
时,都会出现错误消息:
Error in fetch(key) : lazy-load database
'/Library/Frameworks/R.framework/Versions/3.6/Resources/library/mypackage/help/mypackage.rdb' is corrupt
我认为,解决这两个问题的最安全方法是执行R CMD build mypackage
和R CMD INSTALL mypackage.1.0.tar.gz
。