Использование R с помощью git и packrat

Я использовал git некоторое время, но недавно начал использовать packrat. Я хотел бы, чтобы мой репозиторий был автономным, но в то же время я не хочу включать пакеты CRAN, поскольку они доступны. Кажется, что когда R открывается в проекте с помощью packrat, он попытается использовать пакеты из библиотеки проектов; если они недоступны, он попытается установить из src в библиотеке проекта; если они недоступны, он будет смотреть на библиотеки, установленные на этом компьютере. Если библиотека не доступна на компьютере; посмотрит ли он CRAN?

Какие файлы следует включать в мой репозиторий git как минимум (например, packrat.lock)?

Ответ 1

Вы можете выбрать внешний CRAN-подобный репозиторий с исходными tarballs пакетов и их версиями, которые вы хотели бы использовать для своего проекта. Однако поведение по умолчанию - это смотреть в CRAN следующим образом, как вы определили в своем вопросе. Посмотрите файл packrat.lock, вы увидите, что для каждого пакета, который вы используете в packrat, есть опция под названием source: CRAN (если вы скачали файл из CRAN, то есть).

Когда у вас есть локально сохраненный исходный файл пакета, содержимое блокировки для указанного пакета изменяется на следующее:

Package: FooPackage Source: source Version: 0.4-4 Hash: 44foo4036fb68e9foo9027048d28 SourcePath: /Users/MyName/Documents/code/myrepo/RNetica

Я немного неясен в вашем последнем вопросе: What files should I include in my git repo as a minimum (e.g., packrat.lock)? Но я собираюсь принять это как:) комбинацию того, какие файлы должны присутствовать для запуска packrat, и b) какой из этих файлов должен быть зафиксирован к git -repo. Чтобы ответить на первый вопрос, я иллюстрирую инициализацию packrat в существующем проекте R.

Когда вы запускаете packrat::init(), происходят две важные вещи (среди прочего): 1. Все строительные леса packrat, включая исходные tarballs и т.д., Создаются под: PackageName/packrat/. 2. packrat/lib*/ добавляется в ваш файл .gitignore.

Таким образом, мы можем видеть, что что-либо под packrat/lib*/ не нужно связывать с вашим git -repo. Это оставляет следующие 3 файла:

  • packrat/init.R
  • packrat/packrat.lock
  • packrat/packrat.opts

packrat.lock необходим для взаимодействия с другими через систему контроля версий; это помогает синхронизировать ваши частные библиотеки. packrat.opts позволяет указать различные параметры для конкретного пакета для пакета. Файл создается автоматически с помощью get_opts и set_opts. Перенос этого файла в git -repo гарантирует, что все параметры, которые вы укажете, поддерживаются для всех соавторов. Конечным файлом, который должен быть привязан к репо, является .Rprofile. Этот файл сообщает R использовать частную библиотеку пакетов (когда R запускается из каталога проекта).

В зависимости от ваших потребностей вы можете выбрать фиксацию исходных шариков в репозитории или нет. Если вы не хотите, чтобы они были доступны в вашем git -repo, вы просто добавляете packrat/src/ в .gitignore. Но это будет означать, что любой, кто имеет доступ к git -repo, не будет иметь доступа к исходному коду пакета, и файлы будут загружаться из CRAN или из любой точки, где исходная строка диктует в файле packrat.lock.

Из вашего вопроса, похоже, что передача содержимого папки packrat/src/ в ваше репо может быть тем, что вам нужно.