2013-08-30 91 views
1

我有100次,每次创建三个对象重复循环,例如:创建列表的列表迭代

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

在第一次迭代I这些对象存储在列表的末尾:

myList<-list(a,b,c) 

在新a bc创建第二次迭代存储在同一目录覆盖以前abc

myList<-list(a,b,c) 

而不是覆盖列表的,我想新abc添加到现有列表。

可以在列表中在每次迭代更新,以避免overwrting呢?

有人可以帮忙吗?

+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

好的我已经编辑了这个问题,现在可能更清楚了吗? – db001