2012-09-03 55 views
0

我有以下详细的代码。我需要的基本描述是重复此代码30次,如果可能,将最终值指定为向量。每次模拟运行时,我还需要增加一个种子。所以我想使用复制或重复。但作为复制需要rep(vector, times),我不太确定,因为我没有一个特定的向量分配。复制,重复或其他?

为了更好地解释代码,A是第一个最好的猜测值,它依次通知B,然后B被用作C的输入,C通知D.C和D,然后迭代直到三个值的收敛。

rep(vector,40){ 
set.seed(100) 

............... 
A 
.............. 
B 
.............. 

for (n in 1:50){ 
............... 
C 
.............. 
D 
.............. 
} 
} 
+1

复制需要一个表达式,而不是一个向量。仔细看看,因为它可能是你想要的。 –

回答

4

你可以将所有东西都包装在一个函数中,然后使用sapply为你的函数提供一个索引。

yourfun <- function(seed){ 
    set.seed(seed) 
    # your code here 

    ans <- rnorm(1) 
    # just so we can return something 
    return(ans) 
} 

sapply(seq(500, 530), yourfun) 
+0

嗨,是的,我用我的代码运行这个,它似乎工作。只有一个问题,当我运行我的代码一次,我得到四个值的具体参数。当我使用上面的方法时,它仍然完成,但我看到30个值是无意义的。我尝试调用参数(例如yourfun [“o1”]没有运气),有什么想法? – user1642166

+0

我已经明确指定了我想要返回的内容,但是因为它来自优化例程,所以即时获得每个30的参数,值,计数,收敛和消息值。数值是我想要的,但试图在任何(例如yourfun [“o $ par”])会导致以下错误:test1中的错误[“o $ par”]:'closure'类型的对象不可子集 – user1642166

+1

只需修改yourfun返回的内容即可。或者你可以使用lapply从优化中获得整个结果,然后你可以使用lapply来只抓取你想要的部分。 – Dason