使用knitr与RStudio生成HTML文件的默认位置异常问题咨询
解决R包vignettes目录中Rmd编织HTML到临时目录的问题
这是R包开发里很常见的小疑问,我来帮你拆解原因和解决办法:
为什么会出现这个情况?
vignettes目录是R包专门用来存放包教程文档的特殊目录,RStudio和knitr对它有默认的特殊处理逻辑:
- 为了贴合R包的标准构建流程(比如后续用
devtools::build_vignettes()构建文档),避免把生成的HTML文件混进包的源码中(CRAN不接受包源码里包含已编织好的HTML,只需要保留源Rmd文件),所以默认会把vignettes里Rmd的编织输出放到临时目录。
不同需求的解决方案
1. 只是临时预览HTML(推荐日常开发用)
其实RStudio在编织完成后会自动帮你打开临时目录里的HTML文件,你直接查看就行,不需要手动去找临时文件夹。这个默认行为是符合包开发规范的。
2. 强制让HTML输出到vignettes目录
如果你确实需要把HTML文件留在vignettes目录下,可以通过两种方式实现:
修改Rmd的YAML配置:在你的vignettes Rmd文件的YAML头部添加
output_dir: .,示例如下:--- title: "我的包教程" output: html_document output_dir: . ---这样编织后HTML就会和源Rmd放在同一个目录里。
手动用knitr命令指定输出:在控制台运行以下代码,明确指定输出路径:
knitr::knit("vignettes/your-vignette.Rmd", output = "vignettes/your-vignette.html")⚠️ 注意:如果之后你要把包提交到CRAN,一定要把vignettes目录里的HTML文件添加到
.Rbuildignore文件中,否则会被CRAN拒绝。
3. 标准的包vignettes工作流(推荐发布包时用)
当你准备好发布包时,不要手动编织vignettes,而是用devtools::build_vignettes()命令,它会自动把生成的HTML文件放到包的inst/doc目录下——这是R包存放已构建文档的标准位置。用户安装你的包后,可以通过browseVignettes("your-package-name")轻松查看这些教程。
内容的提问来源于stack exchange,提问作者David Kane
相关产品推荐
相关产品推荐

