Пакет, указанный в разделе зависит, не устанавливается при перестройке пользовательского пакета R - PullRequest
0 голосов
/ 27 сентября 2018

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

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

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

В соответствии с книгой R Packages , пакеты в разделе «Зависит от импорта / импорта» должны быть установлены при перестройке пакета.

1 Ответ

0 голосов
/ 27 сентября 2018

Решение

Используйте 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 () также проверяет, установлены ли эти пакеты).

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

Пример

Я удалил пакет rbenchmark из своегоСистема через

remove.packages("rbenchmark")

затем создала фиктивный пакет с помощью

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

и отредактировала ОПИСАНИЕ, добавив rbenchmark в Imports, так что SOexample зависит от него.Я добавил следующий код в R/hello_world.R:

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

Я попытался R CMD INSTALL, но получил ошибку

* при установке в библиотеку '/ home / duckmayr / R /x86_64-pc-linux-gnu-library / 3.5 '
ОШИБКА: зависимость' rbenchmark 'недоступна для пакета' SOexample '
* удаление' / home / duckmayr / R / x86_64-pc-linux-gnu-library / 3.5 / SOexample '

Но, если я попытаюсь 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)
...