R S4最佳实践:带“S”的插槽;“S4对象的向量”;

R S4最佳实践:带“S”的插槽;“S4对象的向量”;,r,s4,slot,R,S4,Slot,如何正确执行以下操作: 我有一个带有插槽parentSpectrum、ChildSpectrum和name的SpectraSet类(为了保持简单) 名称为character() parentSpectrum应该包含一个ParentSpec类的对象(因此它是ParentSpec类型) childSpectra应包含ChildSpec类的n个对象。但是,我不能将其设置为ChildSpec类型,因为向量只能包含原子类型。在这种情况下,最佳做法是什么?我可以将其设置为list()并在有效性检查中键入ch

如何正确执行以下操作:

我有一个带有插槽parentSpectrum、ChildSpectrum和name的SpectraSet类(为了保持简单)

名称为character()

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

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

这里是我过去提供的

通常最好重新考虑类设计,使ChildSpec本质上是一个向量——最低限度,支持length()和subseting[,[[。然后,您的问题就解决了,设计与R的向量化方向一致,并且可能的常见操作是有效的

实现您自己的类型检查列表(实际上是另一种选择)的另一种选择是从的类重用基础结构

在行动中

> 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

Hm-不确定这种方法(考虑ChildSpectrum而不是ChildSpectrum)在我的情况下是否可行,因为我从另一个包(MSnbase Spectrum2)中的现有频谱类派生ChildSpec。此外,每个频谱已经是多个n长度向量的对象(可以导出为数据帧)加上额外的1-长度属性。我仍然需要考虑这个问题。
> 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