Конфликт пространства имен между двумя методами S3, определенными в разных пакетах R - PullRequest
1 голос
/ 05 апреля 2020

Мне нужен совет о том, как бороться с конфликтом пространства имен. В частности, два пакета, которые я использую, одновременно определяют методы с одинаковыми именами 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...