Подтвердить что ты не робот

Как установить зависимости при использовании "R CMD INSTALL" для установки пакетов R?

Я разрабатываю свой первый пакет R (используя R 2.13, Ubuntu 10.10). Позвольте называть его foo и скажем, что код в каталоге R/начинается с библиотеки строк (bar), где bar - это существующий пакет, в CRAN, от которого зависит foo. Мой файл DESCRIPTION содержит строку:

Depends: bar

Когда пакет foo готов к тестированию, я устанавливаю его локально, используя:

R CMD INSTALL foo_1.0.tar.gz

Однако, если бар не установлен, я вижу:

ERROR: dependency ‘bar’ is not available for package ‘foo’

Очевидно, что если мои foo были установлены из CRAN с помощью install.packages(), панель будет установлена ​​одновременно. Поэтому мой вопрос: как я могу убедиться, что панель пакетов CRAN установлена, если требуется, когда я устанавливаю свой пакет foo с помощью R CMD INSTALL? Является ли это заданием для конфигурации script?

4b9b3361

Ответ 1

Собственно, перечитав руководство R-расширений, он не говорит, что R CMD INSTALL получит зависимости от CRAN. Метод install.packages() из R будет делать это, но на первый взгляд я не думаю, что R CMD INSTALL делает.

Вы можете использовать install.packages для установки из .tar.gz, но вам нужно установить repos = NULL, а затем это применимо:

 dependencies: logical indicating to also install uninstalled packages
          on which these packages depend/suggest/import (and so on
          recursively).  Not used if repos = NULL.

Я подозреваю, что нужно сделать, чтобы получить зависимости из файла DESCRIPTION, а затем запустить R и сделать install.packages() для тех, кто тестирует вашу сборку в чистой среде.

Ответ 2

К счастью Devtools обеспечивает простое решение: install_deps()

install_deps (pkg = ".", dependencies = logical, threads = getOption ( "Ncpus", 1))

Аргументы:
pkg: описание пакета, может быть путь или имя пакета. Видеть           'As.package для получения дополнительной информации

зависимости: "логическое указание на установку удаленных пакетов           который этот pkg зависит от/ссылок на/предлагает. См. Аргумент           'Зависимостей' install.packages.

threads: количество одновременных потоков для установки           зависимостей. По умолчанию используется опция "Ncpus" или "1 if           неустановленный.

Примеры:

install_deps(".")  
install_deps("/path/to/package",dependencies="logical")

Ответ 3

В итоге я просто использовал документ bash здесь и указал зеркало облака, чтобы найти зависимости:

sudo R --vanilla <<EOF
install.packages('forecast', repos='http://cran.us.r-project.org')
q()
EOF

пакет R "прогноз", облачное зеркало, которое я использовал, было http://cran.us.r-project.org. Если вы хотите использовать другое зеркало, вот они: https://cran.r-project.org/mirrors.html

Вышеописанное помогло мне получить пакеты R в сценарии начальной загрузки AWS EMR.

Ответ 4

Подобно @Jonathan Le, но лучше для использования script:

sudo R --vanilla -e 'install.packages("forecast", repos="http://cran.us.r-project.org")'

Ответ 5

Механизм для этого заключается в добавлении записи в поле depends в ваш файл DESCRIPTION.

Depends: bar

Загрузите библиотеку bar, если она уже установлена, иначе она будет установлена ​​из CRAN.

Это описано в разделе 1.1.1 руководства Writing R extensions: http://cran.r-project.org/doc/manuals/R-exts.html#The-DESCRIPTION-file

Ответ 6

Бонусные очки:

Как сделать этот процесс полностью автоматическим, не задавая вопросов/необходимости взаимодействовать с пользователем, даже если это первый раз, когда пользователь устанавливает пакет R?

т.е. install.packages должен создать некоторый каталог библиотеки на уровне пользователя и использовать всю необходимую информацию по умолчанию и рабочие параметры по умолчанию.

PS: Мне не разрешено публиковать комментарии этого автократического сайта

Ответ 7

Следуя идее Romain Rossi, вот простой сценарий оболочки, который устанавливает каждый аргумент, который вы отправляете ему (при условии, что это пакет):

#!/bin/sh 
for f in $* 
    do 
    sudo R --vanilla -e "install.packages('"$f"', repos='http://cran.us.r-project.org')" 
done