在来自其他包的 S4 类之间创建转换方法

问题描述

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

当我使用自己的 S4 类创建包时,我可以添加与其他类的转换,如下所示:

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

一旦包被加载,这些就可以正常工作,前提是类被正确导出。

但是现在假设我想从 A获取 packageA 类,从 B获取 packageB 类,这两个类都是 S4 类,并且我想创建我自己的转换函数到/从 AB(假设两个包都没有定义到/从另一个包的类的转换函数)。

如果我尝试添加如下内容

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()

然后它就可以正常工作了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...