R CMD检查不考虑knitr代码块中的选择性代码计算
我正在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 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 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很好;只有在我尝试选择性地评估块时才会出现问题。问题似乎比我最初认为的要严重,因此这可能不会很快得到解决。我的解决方法是:
\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')中的现有引擎
这样您就不必完全重新定义knitrvignette引擎。您是在包源代码上使用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的讨论会如此激烈