计算重R的小插曲

And*_*rau 10 packages r cran knitr

我目前正在将一篇JSS文章转换knitr为一个R 包小插图.但是,我对插图的位置,结构和我应该如何处理所需的非常长的计算时间有疑问,这在普通笔记本电脑上需要大约2天.

官方文件提供几乎对此没有任何信息.邮件列表中的答案中的简短注释是我在搜索时找到的唯一信息.Brian Ripley在这里写道:

特别是,CRAN确实接受带有Sweave小插图的包裹,这些小插曲需要很长时间才能检查 - 一个需要大约8个小时[...].我们只是要求在提交时告知我们.

哈德利威克姆对小插曲的描述eval = FALSE是一个大块的选择.但是,在我的情况下,这不是一种可行的方法,因为需要从计算中生成数据.

此演示文稿表明,/inst/doc将用于预编译和重型小插曲.但是,这与使用/vignettes包装晕影的新指南(或什么?)不太一致.

目前,我已经放置了我的源文件,/vignettes并且我创建了一个.RData文件,其中包含计算量最大的对象(并且也非常大).然后脚本检查对象是否可通过该.RData文件获得,如果没有,则创建对象.因此,从头开始完全编译和运行,.RData可以简单地删除该文件.

有没有人对这个问题有一些经验或指示?小插图应该在/vignettes/inst/doc?如果是前者是首选,我在哪里放置所需的文件,如.bib,.RData等?我必须承认我发现/vignettesvs /inst/doc有些令人困惑.

pal*_*o13 9

我为基于 knitr 的小插图提供了以下解决方案。我假设您使用devtools进行包维护。为了防止 R 在包检查(即R CMD check)期间运行小插图代码,这将使您包括计算量大的小插图,小插图必须:

  1. 使用不会纠缠 R 代码的小插图引擎。换句话说,发动机不能产生.R在文件中inst/doc,当你执行devtools::build_vignettes()。所述knitr包提供引擎不纠结R代码里面,包括knitr::rmarkdown_notangle其可被用作替代的下降knitr::rmarkdown
  2. 包含在检测到正在调用中执行块评估时动态禁用块评估的代码R CMD check。这可以通过在小插图的顶部放置代码来实现,该代码检查各种设置并knitr::opts_chunk$set(eval = ...)在适当时使用设置块设置。下面显示的代码是从knitr包中借来的,非常感谢 Yihui Xie 研究如何做到这一点。

下面是使用这两种策略,以便它可以使用内置一颗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)
```
Run Code Online (Sandbox Code Playgroud)

有关这种方法的示例,请参阅 GitHub 上的开发包的小插图