Лучшие практики для разработки набора зависимых пакетов 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?

Возможно, я глубоко недопонимаю, как работают пространства имен, и в этом случае это было бы отличным местом для выяснения моего недопонимания!

Ответы на вопрос(1)

Ваш ответ на вопрос