Это может быть тривиально, но я ничего не нашел в Интернете. Можно ли создать вектор пустых объектов S4 в R? Что-то типа:
s4Vec<-rep(emptyS4Object,10)
Спасибо
Это может быть тривиально, но я ничего не нашел в Интернете. Можно ли создать вектор пустых объектов S4 в R? Что-то типа:
s4Vec<-rep(emptyS4Object,10)
Спасибо
Как это:
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]
где @4e3bc1d8
— это адрес списка, а @60b738b8 25 S4SXP g0c0 [OBJ,NAM(2),S4,gp=0x10,ATT]
отмечают начало описания каждого элемента S4, все фактически в одном и том же месте в памяти @60b738b8
и с так называемым полем NAMED, установленным на 2 NAM(2)
. Обратите внимание, что изменение одного элемента списка, скорее всего, приведет к копированию всего списка.
Но если каждый из ваших объектов «А» предназначен для представления, скажем, «строки» в традиционной базе данных, тогда вы должны переосмыслить свой дизайн и сделать так, чтобы «А» представлял всю таблицу и слоты. представлять столбцы. Таким образом, вы просто создадите одну букву «А», а не несколько, и заполните ее слоты векторами одинаковой длины. Это будет эффективно использовать память и настроит вас на эффективные векторизованные вычисления в нисходящем направлении, а не на итерации.
is.vector(list())
иis.vector(expression())
для подтверждения.) - person Josh O'Brien   schedule 04.05.2013replicate()
тоже может работать? (не пробовал) - person Ben Bolker   schedule 04.05.2013