Я не уверен, есть ли единственная лучшая практика в этом случае.Использование @importFrom
для обновления файла NAMESPACE
действительно должно быть директивой для всего пакета, но я никогда не сталкивался с пакетом, у которого были проблемы с этим, или причинами, чтобы его избежать.Если хотите, вы можете аннотировать несколько функций одной и той же директивой @importFrom
, указывая, какие функции используют, какие импортируют, и это не вызовет никаких конфликтов;это полностью зависит от вас, хотя, одного будет достаточно.Использование @import
может вызывать недовольство , но я думаю, что это действительно зависит от того, какой пакет вы импортируете.
Исходя из вашего вопроса, я понимаю, что вы используете ::
явно (что я бы лично сказалэто хорошая практика), и тогда вам даже не нужно изменять NAMESPACE
.В большинстве случаев это было бы просто замечательно, хотя могут быть и особые случаи, которые обычно необходимо рассматривать индивидуально.Эти особые случаи, по крайней мере, по моему опыту, обычно связаны с обобщениями S4.
Возьмем, к примеру, функцию base::rowSums
: это , а не обобщенная функция в base
, ноесли присоединен пакет Matrix
, rowSums
«трансформируется» в универсальный S4, но в базовом пакете универсальным является , а не .Почему это так, выходит за рамки этого ответа (см. ?Methods_for_Nongenerics
для получения дополнительной информации), но это означает, что если ваш пакет использует нотацию base::rowSums
, он не отправляет методы из Matrix
.Единственный способ поддержать оба случая (т. Е. Когда пользователь не использует Matrix
и когда он используется) - использовать rowSums
без base::
.
Теперь, что касается инфиксных операторов, если выЕсли вы хотите использовать ::
, вам нужно что-то вроде base::`%in%`("a", c("a", "b"))
, что, по сути, влечет за собой использование его как функции и потерю синтаксиса инфикса, чего вы, вероятно, не хотите.
Так что, если у вас нет оченьконкретные причины, чтобы избежать того или другого, просто используйте любые обозначения, которые вы предпочитаете.Лично я бы как можно больше придерживался ::
, но никогда бы не использовал его для инфиксных операторов.