R CMD build против devtools :: build () (нестандартный файл / каталог найден на верхнем уровне) - PullRequest
0 голосов
/ 26 марта 2019

Я пишу пакет 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() илисекунда.

Этот поток предлагает:

В заметке говорится, что у вас обычно не должно быть файла с именем build на верхнем уровне вашего пакета..

Файл 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() и почему первый бросает эту заметку?

1 Ответ

2 голосов
/ 26 марта 2019

Вы комбинируете несколько шагов, которые выполняют аналогичные и / или конкурирующие функции. Я бы посоветовал прочитать this для лучшей практики build и check workflow.

Когда вы запускаете 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

начиная с корня пакета и затем переходя в родительский каталог.

...