R CMD检查不遵守knitr代码块中的选择性代码评估

mik*_*eck 6 r cran knitr r-markdown

我正在使用32位Windows 7 上的R 3.1.0(以及运行Windows 8 64位的另一台计算机上)构建一个软件包,我正在使用knitr使用Markdown编写小插图.我希望在CRAN上发布这个包,所以我使用R CMD检查来检查我的演示,数据集和小插图是否都表现正常.我把我的小插图保存为.Rmd文件(而不是将它们放在包构建过程之外并将它们存放在inst/doc中),因为它们作为我的包的额外测试并且不管怎样都不是很大.

我的问题是在构建我的小插图时R CMD检查失败,即使我运行R CMD构建然后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
```
Run Code Online (Sandbox Code Playgroud)

在.Rmd文件中,运行R CMD检查将失败,因为它将尝试评估第4行.但是,如果我运行R CMD build mypackage然后R CMD install --build mypackage.tar.gz(我知道这是因为我可以去我的Rlibs文件夹并在mypackage/doc中找到完美的html小插图.同样,如果运行R CMD Sweave来构建小插图,也会正确评估大块.

如果你想自己尝试一下,我正在构建的软件包(我遇到的问题)在Github上:https://github.com/mkoohafkan/flowdurr-edu.您可以查看raw/packagemaker.html以获取相关说明,希望它很简单(R代码贯穿包制目录,构建帮助文件并将一些手动编辑的文件复制到包目录中).R CMD检查在我的所有晕影上失败:当构建flowdurr-datasets.Rmd时,它坚持用虚假路径评估一条线,即使我告诉它不要.在构建hspf-analysis.Rmd时,R CMD检查坚持评估我排除的行,因为它需要很长时间才能完成(使用rgenoud来拟合某些分布参数).R CMD检查也在vignette.Rmd上失败,但原因不同; 我故意抛出错误来展示你不能用特定功能做什么的例子,而knitr没有问题R CMD检查肯定会!

编辑:我的构建脚本有点讨厌,所以我制作了这个虚拟包,在我的两台机器上重现了这个问题.它说明了1)R CMD检查评估它不应该的行,2)R CMD检查不支持晕影中的错误评估,即使knitr会写错误输出而没有问题.

所以我想我的问题是:在进行小插图构建时,R CMD检查与R CMD Sweave和R CMD构建/安装有什么不同,有什么我可以做的让R CMD检查尊重knitr的'eval '规格?请注意,如果我使用eval = FALSE,R CMD检查将尊重它,一切都很好; 只有当我尝试选择性地评估一个块时才会出现问题.

Yih*_*Xie 5

我在knitr开发版1.6.2中添加了后缀的晕影引擎.对于原来的小插曲引擎,您可以使用新的引擎禁用纠结(如,...)._notangleknitr::fooknitr::foo_notangleknitr::knitr_notangleknitr::rmarkdown_notangle

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