Мне нужен совет о том, как бороться с конфликтом пространства имен. В частности, два пакета, которые я использую, одновременно определяют методы с одинаковыми именами S3 для одной и той же функции generi c. Первый пакет - пакет ergm
; второй пакет lme4
. Они оба определяют simulate.formula
.
Когда я загружаю пакет ergm
, но не lme4
, я могу просто имитировать:
library("ergm")
data(florentine)
gest <- ergm(flomarriage ~ edges + absdiff("wealth"))
f <- gest$formula
coefs <- coef(gest)
s <- simulate(f, coef = coefs)
Если я загружаю пакет lme4
после ergm
я получаю ошибку:
library("ergm")
library("lme4")
data(florentine)
gest <- ergm(flomarriage ~ edges + absdiff("wealth"))
f <- gest$formula
coefs <- coef(gest)
s <- simulate(f, coef = coefs)
Ошибка в весах (объект): отсутствует аргумент "объект" без значения по умолчанию
Это потому что метод simulate.formula
в lme4
используется потому, что пакет был загружен последним и перезаписал метод simulate.formula
пакета ergm
.
В моем личном использовании я, конечно, могу просто избежать загрузки lme4
после ergm
. Однако я использую simulate
в пакете и не могу избежать того, что некоторые пользователи могут сделать это, поскольку они не знают лучше. Фактически, я получил несколько запросов, сообщающих мне об этой ошибке.
Если бы это была функция, я бы сослался на нее, используя ::
. Есть ли что-то подобное для ссылки на метод, определенный в конкретном c пакете? Если так, должен ли он быть экспортирован пакетом? Или как еще можно избежать конфликта пространства имен?
См. Также обсуждение в репозитории GitHub ergm
.