R S4最佳实践:带有“S4对象矢量”的插槽

时间:2014-11-07 10:53:26

标签: r s4 slot

如何正确执行以下操作:

我有一个带有插槽parentSpectrum,childSpectra,名称的SpectraSet类(为了保持简单)

name是character()

parentSpectrum应包含ParentSpec类的一个对象(因此它的类型为ParentSpec)

childSpectra应该包含类ChildSpec的n个对象。但是我无法使它成为ChildSpec类型,因为向量只能包含原子类型。在这种情况下,最佳做法是什么?我可以将它作为list()并在有效性检查中键入检查,但还有什么更好的吗?

1 个答案:

答案 0 :(得分:0)

以下是我过去提供的related anaswers

通常最好重新考虑类设计,因此ChildSpec本质上是一个向量 - 最低限度,支持length()和子集[,[[。上面的问题消失了,设计与R的矢量化方向一致,可能常见的操作是有效的。

实现自己的类型检查列表(实际上是另一种选择)的替代方法是重用BiocdonductorS4Vectors

中的基础结构
.X = setClass("X", representation(x="numeric"))
.XList = setClass("XList", contains="SimpleList",
    prototype=prototype(elementType="X"))

并在行动中

> xl = .XList(listData=list(.X(x=1), .X(x=2)))
> xl
XList of length 2
> xl[[2]]
An object of class "X"
Slot "x":
[1] 2