我目前正在将使用knitr
的JSS文章转换为R 包装小插图。但是,我对插图的位置,结构以及如何处理所需的非常长的计算时间表示怀疑,这在普通笔记本电脑上需要2天左右。
official documentation提供的信息几乎没有。 mailing list中答案中的简短注释是我在搜索时找到的唯一信息。 Brian Ripley在这里写道:
特别是,CRAN确实接受具有Sweave晕影的包 需要很长时间才能检查 - 一个需要大约8个小时[...]。我们只是要求在提交时告知我们。
Hadley Wickham's description的插图表示将eval = FALSE
设置为块选项。但是,在我的情况下,这不是一种可行的方法,因为需要从计算中生成数据。
This presentation表示/inst/doc
将用于预编译和繁重的插图。但是,这与使用/vignettes
用于包装晕影的新指南(或什么?)不太一致。
目前,我已将我的源文件放在/vignettes
中,并创建了一个.RData
文件,其中包含计算量最大的对象(并且也非常大)。然后脚本检查对象是否可通过.RData
文件获得,如果没有,则创建对象。因此,从头开始编译和运行,可以简单地删除.RData
文件。
有没有人对这个问题有一些经验或指示?
小插图应该在/vignettes
还是/inst/doc
?
如果首选前者,我在哪里放置所需的文件,例如.bib
,.RData
等?
我必须承认,我发现/vignettes
vs /inst/doc
有些令人困惑。
答案 0 :(得分:4)
我提出了以下针对基于knitr的小插曲的解决方案。我假设您正在使用 devtools 进行包维护。为了防止R在包检查期间运行晕影代码(即R CMD check
),这将允许你包含计算量很大的晕影,小插曲必须:
.R
时,引擎不得在inst/doc
中生成devtools::build_vignettes()
个文件。 knitr 包提供了不会纠缠R代码的引擎,包括knitr::rmarkdown_notangle
,可用作knitr::rmarkdown
的代替。R CMD check
的调用中执行时动态禁用块评估的代码。这可以通过将代码放置在插图的顶部来检查各种设置并在适当时使用knitr::opts_chunk$set(eval = ...)
设置块设置来实现。下面显示的代码是从 knitr 包中借来的,所以非常感谢谢一晖研究如何做到这一点。下面是一个rmarkdown晕影文件的示例,该文件使用这两个策略,以便可以使用devtools::build_vignettes()
构建它,并且不会在R CMD check
期间执行其代码。请注意,在构建程序包时仍然会执行代码(例如,在devtools::build()
和devtools::check()
期间完成)。
---
title: "example vignette"
output:
rmarkdown::html_document:
self_contained: yes
fontsize: 11pt
documentclass: article
vignette: >
%\VignetteIndexEntry{example vignette}
%\VignetteEngine{knitr::rmarkdown_notangle}
---
```{r, include = FALSE}
is_check <- ("CheckExEnv" %in% search()) || any(c("_R_CHECK_TIMINGS_",
"_R_CHECK_LICENSE_") %in% names(Sys.getenv()))
knitr::opts_chunk$set(eval = !is_check)
```
```{r}
Sys.sleep(100)
```
有关这种方法的例子,see this vignette for a developmental package on GitHub。