Пакет, указанный в разделе зависит, не устанавливается при перестройке пользовательского пакета R

Я перестраиваю собственный R-пакет, в котором, помимо других библиотек, есть RcppArmadillo в строке Depends файла DESCRIPTION.

Я бегу R 3.5.1. Когда я перестраиваю пакет в RStudio, я получаю сообщение об ошибке:

ERROR: dependency ‘RcppArmadillo’ is not available for package 'custom package name'

Согласно книге R Packages, пакеты в разделе "Зависит от импорта / должны быть установлены", когда пакет перестраивается.

1 ответ

Решение

Решение

использование devtools::install() вместо.

объяснение

По данным сайта RStudio,

Команда Build and Reload выполняет несколько последовательных шагов, чтобы обеспечить чистый и правильный результат:
1. Загружает любую существующую версию пакета (включая общие библиотеки, если это необходимо).
2. Сборка и установка пакета с использованием R CMD INSTALL.
3. Перезапускает базовый R-сеанс, чтобы обеспечить чистую среду для повторной загрузки пакета.
4. Перезагружает пакет в новом сеансе R, выполняя библиотечную функцию.

В то время как devtools::install() установит зависимости для вас - от help("install.packages"):

Использует R CMD INSTALL для установки пакета. Также будет пытаться установить зависимости пакета от CRAN, если они еще не установлены.

(выделение добавлено) это не относится к R CMD INSTALL один (см ?INSTALL от R или R CMD INSTALL --help из командной строки и т. д. - нет упоминания об установке необходимых зависимостей).

Итак, кажется, язык

Фактически, каждый раз, когда ваш пакет установлен, эти пакеты, если они еще не установлены, будут установлены на вашем компьютере (devtools::load_all() также проверяет, установлены ли эти пакеты).

от R пакетов Хэдли является немного определенным; это не относится к использованию R CMD INSTALL (которую, очевидно, использует функция построения RStudio), но она работает для devtools::install(), Это вопрос личного вкуса, но, честно говоря, я настоятельно рекомендую использовать devtools в вашем процессе разработки пакета.

пример

I removed the package rbenchmark from my system via

remove.packages("rbenchmark")

then created a dummy package by

devtools::create("SOexample", rstudio = FALSE)

and edited the DESCRIPTION to put rbenchmark in Imports, so that SOexample зависит от этого. I added the following code in R/hello_world.R:

hello_world <- function() print("Hello, world!")

Я старался R CMD INSTALL, but got the error

*installing to library '/home/duckmayr/R/x86_64-pc-linux-gnu-library/3.5'
ERROR: dependency 'rbenchmark' is not available for package 'SOexample'
*removing '/home/duckmayr/R/x86_64-pc-linux-gnu-library/3.5/SOexample'

But, if I try devtools::install():

> devtools::install("SOexample/")
Installing SOexample
trying URL 'https://cloud.r-project.org/src/contrib/rbenchmark_1.0.0.tar.gz'
Content type 'application/x-gzip' length 5093 bytes
==================================================
downloaded 5093 bytes

Installing rbenchmark
'/usr/lib/R/bin/R' --no-site-file --no-environ --no-save --no-restore --quiet  \
  CMD INSTALL '/tmp/RtmpA0NOMe/devtools723832018149/rbenchmark'  \
  --library='/home/duckmayr/R/x86_64-pc-linux-gnu-library/3.5' --install-tests 

* installing *source* package ‘rbenchmark’ ...
** package ‘rbenchmark’ successfully unpacked and MD5 sums checked
** R
** demo
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (rbenchmark)
'/usr/lib/R/bin/R' --no-site-file --no-environ --no-save --no-restore --quiet  \
  CMD INSTALL '/home/duckmayr/SOexample'  \
  --library='/home/duckmayr/R/x86_64-pc-linux-gnu-library/3.5' --install-tests 

* installing *source* package ‘SOexample’ ...
** R
** byte-compile and prepare package for lazy loading
** help
No man pages found in package  ‘SOexample’ 
*** installing help indices
** building package indices
** testing if installed package can be loaded
* DONE (SOexample)
Другие вопросы по тегам