我正在使用两个基本上是“对等”的R软件包(network和sna):它们相互建议并提供兼容和相关的功能。不幸的是,它们都定义了'%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,但我想这必须发生在命名空间加载的函数尚未附加到的环境中?