Лучшие практики для разработки набора зависимых пакетов R
Я начинаю работать над семейством пакетов R, каждый из которых имеет общий общий код, который содержится в собственном пакете, и давайте его назовемmyPackageUtilities
, Итак, у меня есть несколько пакетов
myPackage1
, myPackage2
, так далее...
Все эти пакеты зависят от каждого метода вmyPackageUtilities
, Для реального примера, пожалуйста, смотритестатнет на CRAN, Идея заключается в том, что будущий разработчик может создатьmyPackageN
и вместо того, чтобы переписывать / дублировать весь поддерживающий код, этот будущий разработчик может просто использоватьmypackageUtilities
для начала.
Есть осложнения:
1)Немного кода вmypackageUtilities
предназначен для конечных пользователей, а остальное - для внутренних целей разработки. Код конечного пользователя должен быть надлежащим образом задокументирован с использованием roxygen2. Этот код включает в себя как классы S3, так и дженерики, а также различные вспомогательные функции для пользователя.
2) зависимые пакеты (myPackage1
, myPackage2
и т. д.), вероятно, расширит родовые S3, определенные вmyPackageUtilities
.
Мой вопрос: Каков наилучший способ собрать все это? Вот два естественных (но не исчерпывающих) варианта:
ВключаютmypackageUtilities
в разделе Импорт: для всех зависимых пакетов и принудительно загружать пользователейmypackageUtilities
,ВключаютmypackageUtilities
под Зависит: для всех зависимых пакетов, и быть очень избирательным в отношении того, что экспортируется изmypackageUtilities
чтобы не загромождать путь поиска. Весь внутренний (не экспортированный) код должен быть доступен через:::
вmyPackage1
, так далее.Я изначально задавал похожий вопросздесь, но быстро обнаружил, что ситуация быстро усложняется. Например:
Если мы используем Imports: вместо Depends:, тогда любые дженерики, определенные вmypackageUtilities
не найденыmyPackage1
, так далее.Это делает использование общих шаблонов, предоставленныхmypackageUtilities
трудно / невозможно, и почти побеждает цель всей этой установки.Если я определю S3 общего вmypackageUtilities
и документируйте это там, как я могу использовать roxygen2 для ссылки на эти документы вmyPackage1
?Возможно, я глубоко недопонимаю, как работают пространства имен, и в этом случае это было бы отличным местом для выяснения моего недопонимания!