Как вы используете несколько версий одного и того же пакета R? - PullRequest
56 голосов
/ 07 июня 2010

Чтобы иметь возможность сравнивать две версии пакета, мне нужно выбрать, какую версию пакета я загружаю. Система пакетов R по умолчанию настроена на перезапись существующих пакетов, чтобы у вас всегда была последняя версия. Как мне переопределить это поведение?

Пока мои мысли:

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

Мне не обязательно загружать обе версии пакетов одновременно (просто установить где-то в одно и то же время). Возможно, я мог бы возиться с Sys.getenv('R_HOME'), чтобы изменить место, где R устанавливает пакеты, а затем .libpaths(), чтобы изменить место, где R ищет их. Хотя это кажется глупым, у кого-нибудь есть идеи получше?

Ответы [ 2 ]

56 голосов
/ 07 июня 2010

Вы можете выборочно изменить путь к библиотеке.Для полной прозрачности, держитесь подальше от вашего обычного пути, а затем выполните

 library(foo, lib.loc="~/dev/foo/v1")    ## loads v1

и

 library(foo, lib.loc="~/dev/foo/v2")    ## loads v2

То же самое работает для install.packages(), конечно.Все эти команды имеют ряд аргументов, поэтому хуки, к которым вы стремитесь, могут уже присутствовать.Так что не смотрите на изменение R_HOME, скорее посмотрите на help(install.packages) (при условии, что вы устанавливаете из исходного кода).

Но, AFAIK, вы не можете загрузить один и тот же пакет дважды под одним и тем же именем.

11 голосов
/ 30 декабря 2018

Прошло много лет с тех пор, как принятый ответ, который, конечно, остается в силе. Однако, возможно, стоит упомянуть о нескольких новых возможностях, которые возникли в это время:

Управление несколькими версиями пакетов

Для управления несколькими версиями пакетов на уровне проекта (каталога) может быть полезен инструмент packrat: https://rstudio.github.io/packrat/. Короче говоря

Packrat расширяет каталог вашего проекта, сохраняя в нем зависимости вашего пакета, а не полагаясь на вашу личную библиотеку R, которая является общей для всех ваших других сессий R.

Это в основном означает, что каждый из ваших проектов может иметь свою собственную "личную библиотеку", изолированную от пользовательских и системных библиотек. Если вы используете RStudio, packrat очень аккуратно интегрирован и прост в использовании.

Установка пользовательских версий пакета

С точки зрения установки пользовательской версии пакета существует множество способов, возможно, наиболее удобным может быть использование пакета devtools , пример:

devtools::install_version("ggplot2", version = "0.9.1")

В качестве альтернативы, как предложил Ричи, теперь существует более легкий пакет под названием remotes , который является результатом разложения devtools на более мелкие пакеты с очень похожим использованием:

remotes::install_version("ggplot2", version = "0.9.1")

Более подробную информацию по теме можно найти:

...