2016-04-08 7 views
3

У меня возникла ошибка при установке пакетов в автономном режиме, когда у них есть зависимости. Это очень похоже на this question. Я выполнил инструкции для автономной установки. Итак, я установил все пакеты CRAN в каталог и создал файл PACKAGES.Ошибка при установке пакетов с зависимостями от локального репо

Но, кажется, тонкая ошибка с процессом, намеченным в этом ответе

я могу установить пакет из локального репозитория на Linux без проблем, используя команду ниже т.е. не specifiying репо:

install.packages("/software/r_packages/src/contrib/ZillowR_0.1.0.tar.gz",  lib="/usr/lib64/R/library") 

Однако, если я хочу подобрать зависимости, мне нужно указать его на репо и его файл PACKAGES, используя, например,

install.packages("/software/r_packages/src/contrib/ZillowR_0.1.0.tar.gz",  lib="/usr/lib64/R/library", repos="file:///software/r_packages/") 

Но если я делаю это я получаю сообщение об ошибке:

Warning message: 
package ‘/software/r_packages/src/contrib/ZillowR_0.1.0.tar.gz’ is not available (for R version 3.2.3) 

Я проверил и подтвердил, что он читает файл PACKAGES, потому что если я кладу опечатку в записи для ZillowR в PACKAGES I получите ошибку, указывающую, что он не может правильно разобрать запись.

+0

@Thomas Просто попробовал то же самое - к сожалению –

+0

Да что сработало спасибо! (Можете ли вы ответить как ответ, чтобы я мог принять ответ?) Сначала у меня были исходные файлы в программном обеспечении/r_packages/src/contrib. Когда я скопировал их обратно в software/r_packages, но сохранил файл PACKAGES в программном обеспечении/r_packages/src_contrib, он работал нормально. Я думаю, когда инсталлятор попадает в файл PACKAGES, он работает на втором уровне, чтобы найти фактический источник. –

ответ

1

Что должно работать для вас здесь состоит в следующем:

install.packages(pkgs = "ZillowR", type = "source", 
       lib = "/usr/lib64/R/library", 
       contriburl = "file:///software/r_packages/") 

Аргументы для install.packages() может быть довольно подавляющим, и все настройки по умолчанию настроены для работы с установленными пакетами из CRAN (или другого удаленного хранилища). Для того, чтобы распаковать, что происходит здесь, рассмотрим следующий код для установки ZillowR из CRAN:

install.packages(pkgs = "ZillowR") 

Это настройка по умолчанию много, так что вы на самом деле вызова:

install.packages(pkgs = "ZillowR", lib = .libPaths()[1], 
       repos = getOption("repos"), 
       contriburl = contrib.url(repos, type), 
       type = getOption("pkgType")) 

Два ключевых значений по умолчанию призывают некоторые глобальные опции, которые на моей установке устанавливаются на:

> getOption("repos") 
           CRAN       CRANextra 
     "https://cloud.r-project.org" "http://www.stats.ox.ac.uk/pub/RWin" 
> getOption("pkgType") 
[1] "both" 

Вам необходимо (потенциально) преодолеть эти значения по умолчанию в порядок, чтобы сделать местный установить и ключевую для преодоления является значение contriburl (которое наследуется от repos. Зная, что появляется ваша интуиция (справедливо), чтобы было следовать инструкциям по installing a local source package, такие как:

install.packages(pkgs = "/software/r_packages/src/contrib/ZillowR_0.1.0.tar.gz", repos = NULL, type = "source") 

Но поведение install.packages() полностью отличается там, потому что pkgs аргумент ожидает, что имя файла из исходный архив (когда repos и, следовательно, contriburl - NULL).

С местным КРАН-как репо, вы на самом деле хотите установить pkgs на имя пакета и установить contriburl на пути местного репо.Как ссылка здесь the relevant section of the docs для contriburl:

contriburl URL(s) of the contrib sections of the repositories. Use this argument if your repository mirror is incomplete, e.g., because you burned only the ‘contrib’ section on a CD, or only have binary packages. Overrides argument repos. Incompatible with type = "both".

Последнее предложение показывает, почему вы (возможно) необходимо установить type = "source".

+0

Работает отлично. Благодаря! @Томас –