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

Как управлять несколькими местами (папками) пакетов в R?

Прежде чем перейти на R-2.14, я хочу воспользоваться возможностью для оптимизации структуры папок моих установленных пакетов.

В настоящий момент я использую R по умолчанию, то есть все новые установленные пакеты отправляются в R_LIBS_USER. Тем не менее, я действительно различаю два класса пакета:

  • Пакеты, которые я использую повторно для выполнения своей работы, например. plyr, data.table и т.д.
  • Пакеты, которые я устанавливаю, просто для экспериментов (часто для репликации вопроса или ответа на StackOverflow)

Так как install.packages предлагает один вариант указать аргумент lib, это, безусловно, возможно.

Есть ли простой способ управления расположениями пакетов, например. создав некоторые разумные параметры настройки/обертки в .RProfile или RProfile.Site?

4b9b3361

Ответ 1

Отличный пакет Hadley devtools предоставляет функцию dev_mode.
http://www.inside-r.org/packages/cran/devtools/docs/dev_mode

Здесь вы можете найти пример использования: https://gist.github.com/1150934

В принципе,

dev_mode(TRUE, path = "anywhere-you-want-to-install")
install.packages("anything-that-you-want-to-install")

является мощным способом.

Ответ 2

Есть много вариантов для этого. Первое, что я сделал, - это адаптировать мой Rprofile.site, чтобы он содержал следующую строку, в результате чего мой путь по умолчанию стал каталогом, не включенным в мою установку R.

 .libPaths(c("D:/R/Library",.libPaths()))

Это делает D:/R/Library мой путь по умолчанию, не теряя других путей. Вы можете добавить два пути к этому, например D:/R/Library/Work и D:/R/Library/Test. Тот, который помещается в первую позицию, используется по умолчанию, если вы не укажете lib в install.packages().

Затем вы можете назначить две переменные в вашем .Rprofile.site. Они назначаются в базовом пространстве имен и, следовательно, всегда доступны и не удаляются с помощью ls(). Что-то вроде

 .libwork <- 'D:/R/Library/Work'
 .libtest <- 'D:/R/Library/Test'

который позволяет устанавливать такие пакеты, как:

 install.packages('aPackage',lib=.libwork)

Есть и другие варианты, я думаю, но это то, как я бы рулон.

Ответ 3

Предполагается, что вы можете указать несколько путей/деревьев библиотек через список путей, разделенных двоеточиями, в переменной среды R_LIBS. Я не мог заставить это работать надежно на R 2.13.1-исправленный - он только когда-либо берет первую запись. Я получил R_LIBS и R_LIBS_USER для надежной работы в своей системе - я обычно устанавливаю только первый.

.libPaths() может добавлять новые пути к набору деревьев библиотек. Я бы просто добавил соответствующие вызовы .libPaths(new) в мой .Rprofile, чтобы добавить соответствующие деревья для каждого сеанса. Затем вы можете выбрать, где устанавливать пакеты во время установки - то есть какое дерево использовать.

Ответ 4

Чтобы ответить, я должен дать немного контекста.

В целях воспроизводимости я стараюсь script вещи, включая всю мою настройку R. У меня есть script "initializeR.r", который, помимо прочего, устанавливает пакеты, и я организовал пакеты в пакетах, например, связанные с кэшированием, те, которые связаны с визуализацией, выборкой, пространственной статистикой и т.д. - мой если вы захотите.

Например, здесь приведен фрагмент:

# Profiling & testing
Packages$CodingTools = c("codetools","debug", "profr","proftools","RUnit")

Я объединяю некоторые из пакетов в список "Major" (или первичный), а другие переходят в "Вторичный" список. Я уверен, что все устанавливаю в основном списке - для этого требуется наличие разумной среды R, использование моих собственных скриптов, функций и пакетов и т.д. (Btw, некоторые пакеты назначаются нескольким пучкам, но только несколько; Я де-dupe перед обработкой агрегированного списка.)

Затем я указываю конкретную библиотеку по умолчанию для платформы и устанавливаю туда. Однако эта возможность расширяема, и эту идею можно расширить, включив в нее необязательные места для каждого пакета (или пакета): просто карту из имени пакета, например. "CodingTools" в уникальный каталог (путь к библиотеке), например "D:/R/Library/CodingTools". Это можно сделать при инициализации script, с соответствующими списками и параметрами по умолчанию, или места могут быть сохранены в другом месте, например хэш-таблица, JSON или база данных.

Как говорили другие, путь к библиотеке по умолчанию должен быть передан R. Это можно сделать в .RProfile.site. В моем случае у меня есть еще один script, который используется для инициализации экземпляра R, как мне хотелось бы. Я пытаюсь избежать внешних файлов параметров, которые читаются R (например, Rprofile), и вместо этого выполняет все инициализации через вызовы функций в моем собственном пакете (хотя параметры по-прежнему являются внешними). Это, как правило, облегчает мне отладку и воспроизведение моей работы. Таким образом, мои пути к библиотеке могут быть включены в один и тот же тип JSON, где указаны местоположения файлов данных.

Лично я хочу уйти от определения пакетов внутри script и вместо этого использовать JSON, так как я могу более легко создавать разные файлы JSON для разных конфигураций настроек. Я уже делаю это для большинства других целей воспроизводимой работы.