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

Установите локальный пакет 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, он правильно пытается установить локальный файл пакета (как задокументировано), но, очевидно, он не находит пакетов зависимостей.

Итак, мой вопрос: есть ли способ выполнить "смешанную" установку (локальный пакет с онлайн-зависимостями) или единственный способ сделать это вручную установить все зависимости?

4b9b3361

Ответ 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, я советую снова скопировать оригиналы кавычек.