2012-09-03 52 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