R CMD 构建与 devtools::build() (非标准 file/directory 在顶层发现)

R CMD build versus devtools::build() (Non-standard file/directory found at top level)

我正在编写一个 R 包并使用以下方法构建和测试它:

Rscript -e "devtools::document()" && R CMD build . && Rscript -e "devtools::test();devtools::check()"

我收到一张纸条:

checking top-level files
   Non-standard file/directory found at top level:
     ‘PosteriorBootstrap_0.0.1.tar.gz’

我收到 devtools::check() 是第一个还是第二个的注释。

这个 thread 建议:

The note is telling you that you usually shouldn't have a file called build in the top level of your package.

tar.gz 文件是由 R CMD build 创建的,即使我在 运行 之前删除它,我也会得到同样的错误。

这个 线程 建议将 tar.gz 文件添加到 .Rbuildinore,这会删除注释。

另一种删除它的方法是 运行 来自 devtools 的所有内容:

Rscript -e "devtools::document(); devtools::build(); devtools::load_all('.'); devtools::test(); devtools::check()"

然后我没收到那张便条。

R CMD builddevtools::build() 有什么区别,为什么前者会抛出那个字条?

您正在组合执行类似 and/or 竞争功能的多个步骤。我建议阅读 this 以获得最佳实践 buildcheck 工作流程。

当您 运行 R CMD build 时,它会将包构建到当前目录,这是顶级包目录。因此,当您 运行 检查时,它会在包根目录中看到 .tar.gz 文件,这是包中包含的非标准文件,因此会出现警告。 devtools::build() 很聪明,它会将包构建到包 parent 目录(无论您从何处调用它)。尝试调用与 devtools 函数混合的 R CMD 命令会产生问题,因为 devtools 也会调用 R CMD 命令,因此您可能会在不同的时间点重复操作或导致命令以错误的顺序调用。

根据上面的 link,最佳实践工作流程是:

Rscript -e "devtools::document();devtools::check();devtools::build()"

从包根调用,你完全避免处理 R CMD。如果你想使用 R CMD 它看起来像这样:

Rscript -e "devtools::document()" && cd .. && R CMD build PosteriorBootstrap && R CMD check PosteriorBootstrap*.tar.gz

从包根目录开始,然后切换到父目录。