我正在编写一个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()
是第一还是第二。
This thread建议:
说明告诉您通常不应该有一个名为 构建在您程序包的顶层。
tar.gz
文件是由R CMD build
创建的,即使在运行前将其删除,我也会遇到相同的错误。
This
thread
建议将tar.gz
文件添加到.Rbuildinore
,以删除便笺。
删除它的另一种方法是运行devtools中的所有内容:
Rscript -e "devtools::document(); devtools::build(); devtools::load_all('.'); devtools::test(); devtools::check()"
然后我没有得到那个笔记。
R CMD build
和devtools::build()
有什么区别?为什么前者会抛出该音符?
答案 0 :(得分:2)
您正在组合执行相似和/或竞争功能的许多步骤。我建议阅读this以获得最佳实践build
和check
工作流程。
当您运行R CMD build
时,它会将软件包构建到当前目录,这是顶层软件包目录。因此,在运行检查时,它会在软件包根目录中看到.tar.gz文件,这是软件包中包含的非标准文件,因此发出警告。 devtools::build()
很聪明,可以将软件包构建到软件包 parent 目录中(无论您从何处调用它)。尝试调用与R CMD
函数混合的devtools
命令可能会产生问题,因为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
从软件包根目录开始,然后切换到父目录。