计算重R的小插曲

时间:2015-03-10 10:35:42

标签: r packages knitr cran

我目前正在将使用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有些令人困惑。

1 个答案:

答案 0 :(得分:4)

我提出了以下针对基于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 包中借来的,所以非常感谢谢一晖研究如何做到这一点。
  3. 下面是一个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