Я пишу почти весь свой R-код в пакетах на работе (и использую git). Я активно использую devtools
, в частности короткие пути для load_all
и т. д., когда обновляю функции, используемые в пакете. У меня есть приблизительное представление о devtools
в том смысле, что load_all
создает временную копию пакета, и мне очень нравится этот рабочий процесс для тестирования обновлений функций в пакетах.
Есть ли хороший простой способ/рабочий процесс для запуска симуляций в зависимости от пакета при его одновременной разработке без «нарушения» этих симуляций?
Я подозреваю, что есть простое решение, которое я упустил из виду.
Сейчас я делаю следующее:
получить пакет "mypackage" до точки, готовой для запуска симуляций. скопируйте всю папку, содержащую проект. Запустите симуляции в скопированной папке, используя новое имя пакета «mypackage2»). Запустите сценарии моделирования, которые включают
library(mypackage2)
, но НЕlibrary(mypackage)
. Это досадно означает, что мне нужно обновитьlibrary(mypackage)
вызовов доlibrary(mypackage2)
вызовов. Если я запускаю симуляции с использованиемlibrary(mypackage)
и избегаю использованияlibrary(mypackage2)
, то мне нужно убедиться, что текущая собранная версияmypackage
является «старой», которая не отражает обновления в 2. ниже (но 2. ниже также требует пересборки пакета! ). Обработка всего этого становится грязной.Пока симуляции выполняются в скопированной папке, я могу обновить функции в "mypackage", либо используя
load_all
, либо пересобрав пакет. Мне часто нужно пересобирать пакет (т. е. использоватьload_all
без пересборки пакета, когда тестирование обновлений пакета не является приемлемым решением), потому что я хочу протестировать функции, которые работают небольшие параллельные симуляции сdoParallel
иforeach
и т. д. (в окнах), и любые функции, которые я модифицирую и хочу протестировать, требуют последней сборки «mypackage» в дочерних процессах, которые порождают новые процессы R, вызывающие «mypackage». Я понимаю, что когда пакет создается в R, он сохраняется в..\R\R-3.6.1\library
, и когда будущие сеансы R вызываютlibrary(mypackage)
, они будут использовать эту версию пакета.
В идеале я хотел бы иметь возможность в той же исходной папке запускать симуляции с версией mypackage
, а затем обновлять код в пакете, пока симуляции останавливаются/запускаются, будучи уверенным, что мои изменения разработки не сломаются. симуляции, на которых работает определенная версия пакета.
Есть ли простой способ сделать это без повторного копирования папок (и создания таких вещей, как «mypackage2»)?
Благодарность
Описанная здесь проблема похожа на ту, с которой я столкнулся Укажите расположение пакета в foreach
Проблема в том, что если я запускаю симуляцию, которая занимает несколько дней, используя "mypackage", с большим количеством вызовов foreach
, а также обновляю и перестраиваю "mypackage" при тестировании изменений, будущие foreach
вызовы из симуляции могут подобрать новую обновленную версию пакета. пакет, что было бы катастрофой.
foreach
и порождают новые процессы R, которые загружают последнюю версию пакета в папку библиотек), я думаю, что существует риск любого дочернего R процессы в моделировании прерываются, потому что они отражают изменения в пакете. - person   schedule 08.08.2019