如何在R NAMESPACE中有条件地定义泛型函数

时间:2014-08-11 19:44:37

标签: r namespaces

我正在使用两个基本上是“对等”的R软件包(networksna):它们相互建议并提供兼容和相关的功能。不幸的是,它们都定义了'%c%'运算符,因此加载第二个包会发出警告:

The following object is masked from ‘package:sna’: %c%

这似乎是S3泛型的完美工作 - 网络包可以定义%c%.network,sna可以定义%c%.matrix,调度由%c%泛型适当处理。问题是,由于两个软件包都需要独立工作,如何定义和导出通用软件以避免警告?

我已经尝试在两个NAMESPACE文件中放置如下代码,以便先使用哪个加载来定义泛型:

if (!exists('%c%')){ 
  export(`%c%`)
}

但它似乎不起作用。处理这种条件函数定义和命名空间导出的正确方法是什么?

编辑: 稍微深入研究了R src(https://svn.r-project.org/R/branches/R-3-1-branch/src/library/base/R/namespace.R)中R NAMESPACE文件的解析。似乎支持'if',它的参数应该是eval()'d,但我想这必须发生在命名空间加载的函数尚未附加到的环境中?

0 个答案:

没有答案