创建一个空S4对象的向量

时间:2013-05-03 20:06:19

标签: r s4

这可能是微不足道的,但我没有在网上找到任何东西。 是否可以在R中创建空S4对象的向量? 类似的东西:

s4Vec<-rep(emptyS4Object,10)

由于

2 个答案:

答案 0 :(得分:4)

像这样:

s4Vec <- lapply( rep("yourClass", 10), new )

答案 1 :(得分:2)

我很想和

一起去
.A <- setClass("A", representation(x="integer"))
a <- list(.A())[rep(1, 100)]

创建单个实例(使用setClass返回的方便生成器)然后复制该对象,因为R将复制列表中的任何其他对象 - a的元素实际上是相同的例如,标记为准备在更改时重复;你可以从

看到这个
> .Internal(inspect(a))
@4e3bc1d8 19 VECSXP g0c2 [NAM(2)] (len=2, tl=0)
  @60b738b8 25 S4SXP g0c0 [OBJ,NAM(2),S4,gp=0x10,ATT] 
  ATTRIB:
[...]
  @60b738b8 25 S4SXP g0c0 [OBJ,NAM(2),S4,gp=0x10,ATT] 

其中@4e3bc1d8是列表的地址,@60b738b8 25 S4SXP g0c0 [OBJ,NAM(2),S4,gp=0x10,ATT]标记每个S4元素的描述的开始,所有实际上都在内存@60b738b8中的相同位置并且与...将NAMED字段设置为2 NAM(2)。请注意,更改列表中的单个元素可能会触发整个列表的副本。

但是,如果您的每个“A”对象都代表传统数据库中的“行”,那么您应该重新考虑您的设计并让“A”代表整个表和插槽代表列。所以你只需要创建一个“A”而不是很多,并使用等长向量填充它的插槽。这将节省内存,并将为您提供下游高效的矢量化计算,而不是迭代。