这可能是微不足道的,但我没有在网上找到任何东西。 是否可以在R中创建空S4对象的向量? 类似的东西:
s4Vec<-rep(emptyS4Object,10)
由于
答案 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”而不是很多,并使用等长向量填充它的插槽。这将节省内存,并将为您提供下游高效的矢量化计算,而不是迭代。