我有一个“DESeqResults”类的 S4 对象。本质上,我希望能够向该对象添加新信息。理想情况下,我只想为其添加一些插槽,以便我可以存储以下内容:
myDESet@new_slot = 5
Run Code Online (Sandbox Code Playgroud)
我开始认为我必须创建一个继承“ DESeqResults”的子类,虽然我还不确定如何在 R 中做到这一点,但我更关心如何从原始对象中保留数据完整。
本质上,一个库正在制作和使用这个“D ESeqResults”类对象,在它被创建并拥有一些数据之后,它将被用于很多功能。在创建其中之一之后,我只想向对象添加一些新信息。如果我创建一个扩展这个类并有额外插槽的类,我如何将所有现有数据从类的原始实例转移到子类的新实例中?
实现我在这里要做的事情的最佳方法是什么?是否可以在实例化任何对象之前修改原始类,以便在创建它们时具有我需要的额外插槽?还是有其他方法可以实现这一目标?
非常感谢!
通常的做法是定义父类的新子类:
setClass(
"myDESRclass",
contains="DESeqResults",
slots=c(new_slot="numeric")
) -> myDESRclass
Run Code Online (Sandbox Code Playgroud)
然后您可以使用as将对象转换为您的类:
## x is some DESeqResults object
x <- as(x,"myDESRclass")
x@new_slot <- 5
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,您必须调用setAs或 类似方法,但由于 DESeqResults 是超类,因此该as方法由 R 预先定义,并按预期工作。
如果您不想采用这种方法,有两种选择,但它们不太安全:
1) 使用 S3 而不是 S4。听起来您并不“拥有” DESeqResults 类,因此这可能很困难,但myDESet$new_slot <- 5不会出错。
2) 插槽是作为属性实现的,因此您可以使用attr(myDESet,"new_slot") <- 5. 尽管如此,这个修改过的对象仍然无法通过任何有效性检查,因此这可能非常不稳定。
| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |