2015-08-15 2 views
1

Таким образом, у меня есть список с элементами, которые являются целочисленными векторами переменной длины ... Это может быть воспроизведено как этотКак добавить все элементы списка эффективно в R

N<-1000 
x<-list() 
for(i in 1:N){ 
    x[[i]]<-1:sample.int(10,1) 
} 

Но в моем случае У меня есть список с миллионом элементов, N=1.000.000.

Мне нужно, чтобы добавить все элементы списка, чтобы создать уникальный вектор. Я пробовал следующие методы: все они очень медленные и на самом деле никогда не заканчиваются, потому что добавление в R действительно неэффективно.

library(abind) 
abind(x) 

также это:

y<-integer() 
for(i in 1:length(x)){ 
    y<-append(y,x[[i]]) 
} 

Что вы предлагаете? У вектора будет около 10 миллионов значений ... так что, возможно, R просто не может справиться с этим на обычном компьютере, и единственным решением является разбиение списка на разные части?

+1

Вы пробовали 'unlist (х, use.names = FALSE)'. 'unlist' является достаточно быстрым, но если количество элементов списка слишком велико, то расщепление процесса может быть лучше – akrun

+0

omg ... как я могу забыть о существовании списка ... спасибо – Felipe

ответ

1

Мы можем использовать unlist с use.names=FALSE если list элементы названы

unlist(x, use.names=FALSE) 
+1

альтернативы:' rapply (x, c) 'и' c (x, recursive = T) ', но ваш быстрее! –

Смежные вопросы