R CMD检查不考虑knitr代码块中的选择性代码计算

R CMD检查不考虑knitr代码块中的选择性代码计算,r,knitr,cran,r-markdown,R,Knitr,Cran,R Markdown,我正在R 3.1.0中在Windows7 32位(也在运行Windows 8 64位的不同机器上)构建一个包,并且我正在使用knitr使用标记写入渐晕图。我希望在CRAN上发布这个包,所以我使用R CMD check来检查我的演示、数据集和小插曲是否正常工作。我将我的vignette保存为.Rmd文件(而不是将它们放在包构建过程之外并保存在inst/doc中),因为它们是对我的包的额外测试,并且无论如何都不是很大 我的问题是,在构建我的渐晕图时,R CMD检查失败,即使我运行R CMD buil

我正在R 3.1.0中在Windows7 32位(也在运行Windows 8 64位的不同机器上)构建一个包,并且我正在使用knitr使用标记写入渐晕图。我希望在CRAN上发布这个包,所以我使用R CMD check来检查我的演示、数据集和小插曲是否正常工作。我将我的vignette保存为.Rmd文件(而不是将它们放在包构建过程之外并保存在inst/doc中),因为它们是对我的包的额外测试,并且无论如何都不是很大

我的问题是,在构建我的渐晕图时,R CMD检查失败,即使我运行R CMD build,然后运行R CMD INSTALL——构建一切都很好。查看日志文件,它似乎失败了,因为它尝试计算我明确告诉knitr不要计算的代码。作为一般的例子,如果我写

```{r example-chunk eval=c(1:3, 5:6), tidy=FALSE}
foo = 5
bar = 3
## don't evaluate the next line
file.show("i/dont/really/exist.csv")
## ok, start evaluating again
foobar = foo*bar
```
在.Rmd文件中,运行R CMD check将失败,因为它将尝试计算第4行。但是,如果我运行R CMD build mypackage,然后运行R CMD install--build mypackage.tar.gz,则块将正确计算(我知道这一点,因为我可以转到我的Rlibs文件夹,在mypackage/doc中找到完美的html小插图。同样,如果运行R CMD swave构建小插图,该区块也将得到正确的评估

如果您想亲自尝试,我正在构建的包(我遇到这个问题的地方)位于Github上:。您可以查看raw/packagemaker.html以获得说明,希望它很简单(R代码贯穿于制作包目录、构建帮助文件以及将一些手动编辑的文件复制到包目录的过程).R CMD check在我的所有渐晕图上都失败:在构建flowdurr-datasets.Rmd时,它坚持使用伪路径评估一行,即使我告诉它不要这样做。在构建hspf-analysis.Rmd时,R CMD check坚持评估我排除的一行,因为它需要很长时间才能完成(使用rgenoud来拟合一些分布参数).R CMD check在vignette.Rmd上也失败,但原因不同;我故意抛出错误,以显示无法使用特定函数的示例,尽管knitr没有问题,但R CMD check确实有问题

编辑:我的构建脚本受到了一些憎恨,因此我在两台机器上都复制了这个问题。它说明了1)R CMD check对不应该计算的行进行计算,2)R CMD check不支持在渐晕图中进行错误计算,即使knitr将编写错误输出而没有问题


所以我想我的问题是:当涉及到渐晕图构建时,R CMD check与R CMD swave和R CMD build/install有什么不同,我能做些什么使R CMD check尊重knitr的“eval”规范吗?请注意,如果我使用eval=FALSE,R CMD check将尊重它和所有内容hing很好;只有在我尝试选择性地评估块时才会出现问题。

问题似乎比我最初认为的要严重,因此这可能不会很快得到解决。我的解决方法是:

  • 使用R CMD swave手动构建渐晕图
  • 将HTML输出复制到inst/doc
  • 删除vignettes文件夹(或将条目添加到.Rbuildignore--谢谢@Ben!)
  • 建立和检查
  • 这并不理想,但现在它似乎是我的软件包通过CRAN检查的唯一方法。

    我在knitr开发版本1.6.2中有后缀为
    \u notangle
    的vignette引擎。对于原始vignette引擎
    knitr::foo
    ,您可以使用新引擎
    knitr::foo\u notangle
    to禁用缠结(例如,
    knitr::knitr\u notangle
    knitr::rmarkdown\u notangle
    ,…)


    如果您不想等待下一个版本的knitr出现在CRAN上(这可能需要一段时间),您当然可以自己创建一个包vignette引擎。提示:您可以使用
    tools::vignetteEngine(包='knitr')中的现有引擎
    这样您就不必完全重新定义knitr
    vignette引擎。

    您是在包源代码上使用
    R CMD check
    还是在
    R CMD build
    的输出上使用
    R CMD check pkg;R CMD build pkg_1.0.tar.gz
    呢?正确的顺序是
    R CMD check pkg;R CMD build pkg pkg。我很想知道为什么您有这个复杂的构建脚本,而不是简单地将脚本组织在一个包中。@Andrie有趣的是,我当时的印象是正确的顺序是调用tar.gz文件上的R CMD check(我想我在另一个StackOverflow线程中读到了,但现在找不到它)。谢谢你的提示,不幸的是,在这种情况下没有什么不同。@Andrie W.r.t.我的构建脚本,我的方法中的疯狂反映了我的学习过程,这一过程一点也不简单。另外,我第一次运行inlinedocs(
    package.skeleton.dx
    )是在运行
    package.skeleton()之后
    它将我所有的注释从代码中剥离出来,这挫败了内联文档的目的。我坚持使用构建脚本,因为我不知道如何在代码中保留文档注释。这是我第一次尝试制作包,我不得不做出错误的决定;-)为什么不使用
    devtools
    /
    roxygen2
    来简化文档编制和包构建?我认为您可以将
    .Rbuildignore
    文件中的适当条目替换为步骤3这不是唯一的方法。如果您阅读“Write R Extensions”手册,就可以控制渐晕图引擎。请看我的答案。谢谢@Yihui,太棒了@米克,不客气!我没想到r-devel的讨论会如此激烈