This maybe trivial but I haven't found anything online. Is it possible to create a vector of empty S4 objects in R? Something like:
s4Vec<-rep(emptyS4Object,10)
Thanks
像这样:
s4Vec <- lapply( rep("yourClass", 10), new )
?
我很想和
.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]
where@4e3bc1d8
是列表的地址,并@60b738b8 25 S4SXP g0c0 [OBJ,NAM(2),S4,gp=0x10,ATT]
标记每个 S4 元素的描述的开始,所有元素实际上都位于内存中的相同位置,@60b738b8
并且所谓的 NAMED 字段设置为 2 NAM(2)
。请注意,更改列表的单个元素可能会触发整个列表的副本。
但是,如果您的每个“A”对象都旨在代表传统数据库中的“行”,那么您应该重新考虑您的设计并让“A”代表整个表,而插槽代表列。因此,您只需创建一个“A”,而不是多个,并使用等长向量填充它的插槽。这将节省内存,并将为您设置下游的高效矢量化计算,而不是迭代。