Как я могу импортировать метод S3 из пакета R
без в зависимости от пакета, когда универсальная функция метода не определена в этом пакете?
Более конкретно, мой пакет btergm
(на CRAN и GitHub ) импортирует несколько функций из пакета ergm
. Он также использует метод formula
(определенный в ergm
) обобщенной функции simulate
(определенный в пакете methods
). Я хотел бы импортировать этот метод из ergm
. Как мне это сделать?
В другом месте я читал, что могу добавить зависимость к пакету ergm
. Но я не хочу перемещать ergm
из Imports:
в Depends:
в описании, потому что пакет btergm
определяет свою собственную функцию gof
, в то время как функция с таким именем также присутствует в пакете ergm
, Это может вызвать предупреждение о том, что мой пакет перезаписывает функцию gof
после загрузки ergm
, а CRAN не любит предупреждения.
На данный момент работает без импорта. Однако пакет lme4
также определяет метод formula
для универсальной функции simulate
. Если кто-то загружает lme4
после загрузки ergm
, мой код выбирает неправильный метод. Отсюда необходимость правильного импорта.
Текущая настройка в файле описания пакета btergm
:
Imports: stats4, utils, methods, graphics, network (>= 1.13.0), sna (>= 2.3.2), ergm (>= 3.10.0), parallel, Matrix (>= 1.2.2), boot (>= 1.3.17), coda (>= 0.18.1), stats, ROCR (>= 1.0.7), speedglm (>= 0.3.1), igraph (>= 0.7.1), RSiena (>= 1.0.12.232), statnet.common (>= 4.2.0)
Suggests:
fastglm (>= 0.0.1),
testthat
Depends: R (>= 3.5), xergm.common (>= 1.7.7), ggplot2 (>= 2.0.0)
И соответствующая часть из файла пространства имен:
import("methods")
...
importFrom("ergm", "ergmMPLE")
importFrom("ergm", "control.simulate.formula")
importFrom("ergm", "remove.offset.formula")
importFrom("ergm", "ergm.getnetwork")
importFrom("ergm", "ergm.getmodel")
importFrom("ergm", "ergm.Cprepare")
importFrom("ergm", "ergm.design")
importFrom("ergm", "ergm.pl")
importFrom("ergm", "control.ergm")
importFrom("ergm", "ergm.getglobalstats")
importFrom("ergm", "ergm.geodistdist")
importFrom("ergm", "ergm")
importFrom("ergm", "mcmc.diagnostics")
В пакете ergm
экспорт пространства имен выглядит следующим образом:
S3method(simulate,formula)
Как мне импортировать это сейчас? Это importFrom("ergm", "simulate")
или importFrom("ergm", "simulate.formula")
или importFrom("ergm", "formula-method")
или что-то совершенно другое? Раздел Writing R Extensions по определению импорта ничего об этом не говорит.