Как легко переключаться между разными библиотеками renv в рамках одного проекта.

Что мы сегодня узнаем

Чтобы настроить несколько файлов renv.lock в одном проекте.

Нам нужно решение с минимальными усилиями, которое позволит нам:

  • Переключение между разными файлами renv.lock в зависимости от некоторой переменной среды
  • Не нужно переустанавливать всю библиотеку renv.lock каждый раз, когда мы переключаем проект.

renv

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

renv запишет нужные вам пакеты и их версии в файл с именем renv.lock. Проблема, которую мы сегодня преодолеваем, заключается в том, что renv официально поддерживает только один renv.lock для каждого проекта. Это неплохое решение, но бывают ситуации, когда вам может понадобиться переключаться между несколькими renv.lock. Например:

  • Вы работаете на нескольких системах (Windows, MacOs, Linux).
  • Вам необходимо убедиться, что ваша работа совместима с различными версиями R.
  • Вы хотите иметь развертывания в разных целевых средах из одной кодовой базы.

Разработчики renv утверждают, что пользователи несут ответственность за работу с этими сценариями, а не renv. Хотя я согласен с принципом здесь, я все же хотел найти способ сделать это легко, без дублирования кодовых баз, создания нескольких ветвей или чего-то подобного.

ренв запуск

Когда вы запускаете сеанс R в рамках проекта renv, R сначала использует файл .Rprofile. .Rprofile, затем источники renv/activate.R. Это очень длинный файл, который выполняет несколько функций. В крайнем резюме:

  • Он проверяет, что renv установлен.
  • Он проверяет renv.lock.
  • Он выполняет renv::status().

Если мы изучим renv/activate.R и исходный код renv, мы поймем, что пути обрабатываются с помощью Sys.getenv().

Например, функция renv:::renv_paths_lockfile проверяет глобальную переменную…