我正在 R <3.1> 在 Windows 7 32位(以及运行Windows 8 64位的其他计算机上)构建一个软件包,我正在使用< strong> 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
```
在.Rmd文件中,运行R CMD检查将失败,因为它将尝试评估第4行。但是,如果我运行R CMD build mypackage然后R CMD install --build,将正确评估chunk 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没有问题但是CMD检查确定了!
编辑:我的构建脚本受到了一些仇恨所以我制作了这个dummy package,它在我的两台机器上重现了这个问题。它说明了1)R CMD检查评估它不应该的线,2)R CMD检查不支持晕影中的错误评估,即使knitr会写错误输出而没有问题。
所以我想我的问题是:当进行小插图构建时,R CMD检查与R CMD Sweave和R CMD构建/安装的做法有何不同?有什么我可以做的做R CMD检查尊重knitr&#39; eval&#39;规格? 注意如果我使用eval = FALSE,R CMD检查会尊重它,一切都很好;只有当我尝试选择性地评估一个块时才会出现问题。
答案 0 :(得分:5)
我在 knitr 开发版1.6.2中有added个晕影引擎,后缀为_notangle
。对于原始的晕影引擎knitr::foo
,您可以使用新引擎knitr::foo_notangle
禁用纠缠(例如knitr::knitr_notangle
,knitr::rmarkdown_notangle
,...)。
如果您不想等待 knitr 的下一个版本在CRAN上(可能需要一段时间),您当然可以自己register一个包装晕影引擎。提示:您可以在tools::vignetteEngine(package = 'knitr')
中使用现有引擎,这样您就不必完全重新定义 knitr 晕影引擎。
答案 1 :(得分:2)
问题似乎是more nuanced,而不是我原先的想法,所以这可能不会很快得到解决。我的解决方法是:
它并不理想,但现在它看起来是我的软件包通过CRAN检查的唯一途径。