从其他包创建 S4 类 之间的转换方法

Create conversion methods between S4 classes from other packages

假设我想创建一个 R 包,它定义了 S4 classes 之间的强制方法 (methods::as),这些方法在其他包 中定义。

当我创建一个带有自己的 S4 class 的包时,我可以添加与其他 classes 之间的转换,如下所示:

setAs("MyClass", "OtherClass", function(from) myfun(from))

如果 classes 正确导出,这些在加载包后工作正常。

但现在假设我想从 packageA 中获取 class A 并从 packageB 中获取 class B,这两个这是 S4 classes,我想创建自己的转换函数 to/from A<->B (假设两个包都没有定义转换函数 to/from 其他包的class).

如果我尝试添加这样的内容:

setAs("A", "B", function(from) castAtoB(from))
setAs("B", "A", function(from) castBtoA(from))

然后安装并加载包,这些方法将不可用 - 例如像这样:

library(methods)
library(packageA)
library(packageB)
library(myPackage)

objA <- packageA::createObjA()
as(objA, "B")

将失败并显示如下消息:

Error in as(objA, "B") : 
  no method or default for coercing “A” to “B”

如何注册这些方法,以便在加载我的包时可以使用它们?

我会自己回答:要让它工作需要在 DESCRIPTION 文件中添加以下行:

export()

然后就可以正常工作了。