Установите локальный пакет R с зависимостями от зеркала CRAN
Я создал пакет R, т.е. у меня есть файл mypackage.tar.gz. Этот пакет зависит от нескольких других пакетов, которые можно загрузить и установить из любого зеркала CRAN.
Теперь я хочу установить этот пакет в систему, где зависимости еще не установлены, и я хотел бы, чтобы зависимости загружались и устанавливались автоматически при установке моего пакета.
Я пробовал:
install.packages("mypackage.tar.gz",type="source",dependencies=TRUE,repos="http://a.cran.mirror")
но он ищет mypackage.tar.gz
на зеркале (и, очевидно, он не находит), а если я устанавливаю repos=NULL
, он правильно пытается установить локальный файл пакета (как задокументировано), но, очевидно, он не находит пакетов зависимостей.
Итак, мой вопрос: есть ли способ выполнить "смешанную" установку (локальный пакет с онлайн-зависимостями) или единственный способ сделать это вручную установить все зависимости?
Ответы
Ответ 1
Вы можете использовать install
из пакета devtools. Просто запустите install("<directory of your package>", dependencies = TRUE)
. В его помощи говорится:
Использует R CMD INSTALL для установки пакета. Также попытается установить зависимости пакета от CRAN, если они еще не установлены.
Ответ 2
Если вы уже установили свой локальный пакет, вы можете использовать несколько функций в tools для установки зависимостей из CRAN:
library('tools')
installFoundDepends(pkgDepends('mypackage', local = FALSE)$Found)
Примечание. Вы можете передать args (например, repos
) с installFoundDepends
до install.packages
.
Вы также можете использовать элемент Depends
из вывода pkgDepends
, чтобы перейти непосредственно к install.packages
:
install.packages(pkgDepends('mypackage')$Depends)
UPDATE: По-видимому, установить локальный пакет с dependencies=FALSE
невозможно. Это кажется странным, поскольку вы можете сделать это для удаленного пакета из репозитория. Причина (глядя на исходный код) заключается в том, что if(is.null(repos) & missing(contriburl))
, установка осуществляется через системные вызовы на R CMD INSTALL
, которая не имеет зависимостей - связанные аргументы.
Ответ 3
Я лично использую RStudio, который сообщает вам, какие зависимости отсутствуют. Затем я скопирую строку в аргументах следующего небольшого script, чтобы изменить "странные" символы в классическом "(xclip копирует в буфер обмена [это похоже на pbcopy на macOS]).
#!/bin/bash
echo [email protected] | sed 's/‘/"/g' | sed 's/’/"/g' | xclip -selection clipboard
Затем я просто использую install.packages(c(ctrl_v__what_to_install))
, а R начинает устанавливать все зависимости.
NB: помните, что два ‘
, записанные в вышеуказанном script, различны, и при первом копировании этого script, я советую снова скопировать оригиналы кавычек.