R CMD build与devtools::build()(在顶层找到非标准文件/目录)

R CMD build与devtools::build()(在顶层找到非标准文件/目录),r,devtools,R,Devtools,我正在编写一个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: ‘PosteriorBoots

我正在编写一个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()
是第一位还是第二位

建议:

便条告诉您通常不应该有一个名为 在包的顶层构建

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

建议将
tar.gz
文件添加到
.Rbuildinore
,从而删除注释

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

Rscript -e "devtools::document(); devtools::build(); devtools::load_all('.'); devtools::test(); devtools::check()"
然后我就没有收到那张纸条


R CMD build
devtools::build()
之间有什么区别?为什么前者会引起这样的注意?

您正在组合许多执行类似和/或竞争功能的步骤。我建议阅读《最佳实践
构建
检查
工作流》

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

根据上面的链接,最佳实践工作流将是:

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
从包根目录开始,然后更改为父目录