假設我運行下面的循環(試圖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次,那麼我該怎麼做?
假設我運行下面的循環(試圖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次,那麼我該怎麼做?
首先,你似乎在混合'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
這將創造價值的載體(儘管在這種情況下不會收斂)。
以及很難分享我的原始代碼,因爲它是一個EM算法,在這個論壇沒有人會想要鑑於我以前的經驗,請穿過它。笏我基本上想要的是EM算法應運行500次,並給我一些形式的收斂值。我嘗試了所有的手段,如上面告訴過的,它不給我結果。 –
你的意思是你想獲得一個尺寸爲500 *'maxiter'的矩陣作爲最終結果嗎?如果是這樣,你不應該覆蓋'y',而是保持值。也有一個長度爲500的int'y'值的向量。 –
要注意R索引從默認值1開始...... –
我不清楚該循環/函數應該做什麼,但sapply()運行在某個向量上(例如,整數1到500)將返回一個等效長度的矢量,並將該函數的結果應用於該矢量。例如,'sapply(seq(500),function(x)x + 10)'將返回11,12,... 509,510。看起來這就是你要去的地方。 – ulfelder