Загружать только источники пакета и все зависимости

Мне интересно, если есть способ использовать install.packages() или другие связанные функции, чтобы сделать следующее: загружать только источники (то есть файлы tar.gz ) указанных пакетов и все их зависимости в указанную папку (в Windows) ,

Одна из причин для этого: скажем, у меня есть учетная запись Linux, которая не включена для доступа в Интернет. Чтобы установить пакеты на машине Linux, я сначала загрузил все необходимые источники на моем компьютере с Windows, затем перевёл их на компьютер Linux и установил их на машине Linux, используя

  install.packages('/home/me/R/Packages/blah.tar.gz', repos = NULL) 

Теперь в этом пакете инструментов есть лучшие варианты, которые поставляются с базой R: package_dependencies() . См. Например, ответ от @ sebastian-c и этот недавний Q & A для соответствующего прецедента.


В пакете utils существует getDependencies() функция getDependencies() . Я не изучал, как это работает, но сочетая это с ответом @ Dirk’s, вы должны получить от вас большую часть пути.

В принципе, похоже, вы используете его как:

 utils:::getDependencies(pkgs, dependencies, available, lib) 

где pkgs – вектор символов пакетов для установки, dependencies – это символьный вектор типов зависимостей (Depends, Enhances и т. д.), который вы хотите, available является вывод из available.packages() а lib – это расположение библиотеки для пакетов внутри какие зависимости оцениваются.

Если вы отлаживаете install.packages() он в основном выполняет шаг getDependencies() затем выполняет команду getDependencies() download.packages() прежде чем он начнет что-то устанавливать.

У меня недавно была проблема, когда я хотел загрузить все зависимости, и я решил это так:

Скажем, я хочу все зависимости и импорт ggplot2 и MASS :

 getPackages <- function(packs){ packages <- unlist( tools::package_dependencies(packs, available.packages(), which=c("Depends", "Imports"), recursive=TRUE) ) packages <- union(packs, packages) packages } packages <- getPackages(c("ggplot2", "MASS")) 

Теперь я могу загрузить пакеты в другой каталог.

 download.packages(packages, destdir="whereyouactuallywantthefiles", type="source") 

Оттуда, если вы хотите сделать локальное репо на своем Linux-ПК, следуйте инструкциям здесь .

Попробуйте download.packages(c("xts", "rms"), "c:/TEMP", .....) вместо install.packages() ; вы можете напрямую указать целевой каталог во втором аргументе.

Редактируйте несколько лет спустя: как указано выше, на других ответах и ​​комментариях, к настоящему времени в инструменты и утилиты R добавлены несколько вспомогательных функций. R 3.4.0 будет иметь tools::CRAN_package_db() для загрузки файла tools::CRAN_package_db() верхнего уровня (и, конечно же, вы можете просто комбинировать download.file() и readRDS() для этого).

Interesting Posts

Как определить кодировку символов текстового файла?

Съемка с камеры без предварительного просмотра

CMD не обновляет переменные среды даже при перезапуске ОС

Где я должен делать инъекцию с помощью Ninject 2+ (и как я могу упорядочить свои модули?)

Как я могу открыть 32-разрядный администратор источника данных ODBC в 64-разрядной версии Windows 7?

Создание streamов – Task.Factory.StartNew vs new Thread ()

Сравнение инструментов сравнения для визуального базового 6.0

Захват данных, отправляемых моим модемом ADSL

Можно ли маршрутизировать только конкретное приложение через VPN?

Изолировать размещенную службу (svchost.exe) в своем собственном процессе

Повторяющийся сбой: «Необработанное исключение win32 произошло в mscorsvw.exe». Как диагностировать / исправить?

Студия Android: почему minSdkVersion и targetSdkVersion указаны как в AndroidManifest.xml, так и в build.gradle?

Как исправить ошибку загрузчика Windows XP, когда BOOTCFG, FIXBOOT и FIXMBR ничего не делают?

Все параметры загрузки – это примерный цикл

Почему этот общий код компилируется в java 8?

Давайте будем гением компьютера.