Автономная установка пакета R и зависимостей
Предположим, мне нужно установить несколько пакетов на машине (Linux), у которой нет подключения к Интернету. Скажем, что я скачал копию крана и сжег его на DVD, который я привожу в автономное место:
wget ftp://cran.r-project.org/pub/R/src/contrib/*.tar.gz
Я могу даже добавить файл PACKAGES, содержащий обзор всех исходных пакетов и их зависимостей:
library(tools)
write_PACKAGES()
Как я могу использовать этот автономный режим для установки исходного пакета таким образом, чтобы зависимости были разрешены и установлены из локальных файлов? Например, кто-то хочет установить пакет ggplot2, который имеет довольно глубокую структуру зависимостей. Предположим, что исходный пакет ggplot2 и все его зависимости доступны в виде исходных пакетов в текущем рабочем каталоге. Если я это сделаю:
install.packages("ggplot2_0.9.1.tar.gz", repos=NULL)
Это приводит к ошибке, потому что зависимости не разрешены вообще. Альтернативно:
install.packages(list.files(pattern="*.tar.gz"), repos=NULL)
Однако это также игнорирует структуру зависимостей и пытается установить пакеты в алфавитном порядке, что также потерпит неудачу.
Я просмотрел available.packages
и contrib.url
, но я просто не могу найти пример установки исходного пакета из локального файла, включая его зависимости.
Ответы
Ответ 1
Правильный ответ дал Джошуа Ульрих в комментарии к вопросу:
Ключ префикс аргумента либо repos
, либо contriburl
с помощью file://
. Таким образом, в Unixy-системах можно было бы:
install.packages("ggplot2", contriburl="file:///path/to/packages/")
Предполагается, что все необходимые исходные пакеты, а также индексный файл PACKAGES доступны в /path/to/packages
. Если файл PACKAGES отсутствует, его следует сгенерировать сначала, используя:
library(tools)
write_PACKAGES("/path/to/packages/")
который будет генерировать индекс всех исходных пакетов, найденных в этом каталоге. Обратите внимание, что в этом примере позади префикса file:
имеется 3 слэша. Третий слэш указывает путь относительно корня файловой системы.
Разница между аргументами repos
и contriburl
заключается в том, что repos
добавит другой /src/contrib
к указанному пути, так как обычно это где исходные пакеты находятся на официальном зеркале репозитория CRAN.
Ответ 2
Ссылаясь на ответ выше, если установка выполняется в Windows, тогда write_PACKAGES() создает два файла: PACKAGES и PACKAGES.gz в каталоге '/path/to/packages/', где размещаются все файлы zip. Файл PACKAGES.gz должен быть удален до того, как функция install.packages() правильно сможет прочитать файл одиночного ПАКЕТА, иначе появится сообщение "Невозможно открыть сжатый файл".
Ответ 3
У меня были те же проблемы во время автономной установки. Как-то это не работало по командной строке.
Я загрузил, извлек все зависимости (сохранял проверку минимальной версии) и вставлял папки в папку библиотеки. Таким образом, моя проблема решена.