2013-08-30 2 views
1

У меня есть цикл, который повторяется 100 раз каждый раз создавая три объекта, например:Создать список списков итеративно

a<-TRUE 
b<-1:20 
c<-matrix(data=NA,ncol=2,nrow=10) 

в конце первой итерации я хранить эти объекты в списке:

myList<-list(a,b,c) 

на второй итерации новый a b и c созданы, который хранится в том же списке перезапись предыдущего abc:

myList<-list(a,b,c) 

Вместо того чтобы переписывать список, я бы хотел добавить новый abc в список.

Можно ли обновить список на каждой итерации, чтобы избежать его перезагрузки?

Может кто-нибудь помочь?

+0

Используйте 'lapply()' вместо цикла. – Andrie

+0

это невозможно, потому что это огромная симуляция с 100 строками кода. в списке будут храниться результаты всего моделирования – db001

+0

Итак? Вы все равно можете использовать 'lapply'. – Roland

ответ

3

Если я понимаю проблему, вам нужно место для хранения ваших 100 списков. Если это так вначале;

myList<-vector("list",100) 

Теперь у вас есть пустой список с 100 слотами. После каждого цикла присвойте свой выходной список правильному слоту. То есть для итерации 34 выводятся в mylist[[34]]. Каждая запись в myList сама будет списком ваших результатов.

2

Попробуйте это:

fun <- function() { 
    #insert here as much code as you desire 
    a<-TRUE 
    b<-1:20 
    c<-matrix(data=NA,ncol=2,nrow=10) 

    list(a, b, c) 
} 

replicate(100, fun(), simplify=FALSE) 

Если ваша функция зависит как-то на итерации, вы должны использовать lapply вместо этого.

+0

, но проблема в том, что на каждой итерации предыдущие a, b, c перезаписываются, поэтому я не вижу, как это решает проблему. – db001

+1

Если это не делает то, что вам нужно, вы недостаточно хорошо объяснили свою проблему. – Roland

+0

ok Я отредактировал вопрос, может быть, теперь его яснее? – db001

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