【发布时间】:2019-11-01 08:54:01
【问题描述】:
当方法的通用函数未在该包中定义时,如何在不依赖包的情况下从R 包中导入 S3 方法?
更具体地说,我的btergm 包(在CRAN 和GitHub 上)从ergm 包中导入了几个函数。它还使用simulate 泛型函数(在methods 包中定义)的formula 方法(在ergm 中定义)。我想从ergm 导入这个方法。我该怎么做?
我在别处读到我可以在 ergm 包中添加一个依赖项。但我不想在描述中将ergm 从Imports: 移动到Depends:,因为btergm 包定义了自己的gof 函数,而具有该名称的函数也存在于ergm 包中.这会导致警告说我的包在加载ergm 后会覆盖gof 函数,而CRAN 不喜欢警告。
目前它在没有导入的情况下工作。但是,lme4 包还为simulate 泛型函数定义了formula 方法。如果有人在加载ergm 后加载lme4,我的代码会选择错误的方法。因此需要适当的导入。
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 部分没有说明这一点。
【问题讨论】:
标签: r namespaces package