2015-08-28 28 views
-1

假設我運行下面的循環(試圖acheive收斂Y)如何多次運行算法並將結果存儲在R中的矩陣中?

j=1 
maxiter=10 

for (j<maxiter) { 

y[j]=y[j-1]+1 (#just to take an e.g of newton raphson method) 

j=j+1 

}

我要運行這個循環500次,並把得到的y的值在矩陣中。更具體地說,如果我正在運行一個算法,並且我想要運行該算法500次,那麼我該怎麼做?

+0

你的意思是你想獲得一個尺寸爲500 *'maxiter'的矩陣作爲最終結果嗎?如果是這樣,你不應該覆蓋'y',而是保持值。也有一個長度爲500的int'y'值的向量。 –

+2

要注意R索引從默認值1開始...... –

+1

我不清楚該循環/函數應該做什麼,但sapply()運行在某個向量上(例如,整數1到500)將返回一個等效長度的矢量,並將該函數的結果應用於該矢量。例如,'sapply(seq(500),function(x)x + 10)'將返回11,12,... 509,510。看起來這就是你要去的地方。 – ulfelder

回答

0

首先,你似乎在混合'for循環'和'while循環'。
通過給出要使用的一組值來使用'for循環'。因爲(我在1:10)會運行10次,每次循環從1到10逐漸改變我的值。
只要符合條件,'while循環'就會無限運行,
i=1 while(i<10) i=i+1
這將運行9次導致i == 10。

可能有更有效的方式來實現自己的目標,如在評論中指出以上,但在網上保持與原來的代碼,你需要的是這樣的:

j=1 
y=1 # Whatever starting value you think appropriate for your convergence. 
while(j<500) y[j+1]=y[j]+1 

這將創造價值的載體(儘管在這種情況下不會收斂)。

+0

以及很難分享我的原始代碼,因爲它是一個EM算法,在這個論壇沒有人會想要鑑於我以前的經驗,請穿過它。笏我基本上想要的是EM算法應運行500次,並給我一些形式的收斂值。我嘗試了所有的手段,如上面告訴過的,它不給我結果。 –

相關問題