我想重複該過程,除非在某個時間存儲結果時滿足條件。循環在r中,直到值收斂並存儲所有輸出
下面是一個簡單的例子,我知道循環次數在循環執行:
# just example data
smpls <- rnorm(100,50,50)
ncycles <- 1000
outm <- matrix(nrow=ncycles, ncol = 1)
#repeate過程n個循環
for(i in 1:ncycles){
outm[i] <- mean(sample(smpls, 50))
}
# get average of outm
outm <- mean(sample(smpls, 50))
但是我的情況是在這個意義不同我不認識ncyles。我想繼續採樣,除非樣本會變得非常低方差或收斂(我猜是「while」循環。例如,除非VSD在以下情況下小於1。
vsd <- NULL
outm <- mean(sample(smpls, 50))
while (vsd > 1){
outm[i] <- mean(sample(smpls, 50))
vsd <- sd(outm)
}
我不知道該值我在這裏要設置幫助表示讚賞
編輯:。
smpls <- rnorm(100,50,50)
iter <- 0
# maximum iteration
itermax <- 1000
outm <- rep(NA, itermax)
vsd <- 2
while((vsd > 1) && (iter < itermax)) {
outm[iter] <- mean(sample(smpls, 50))
vsd <- sd(outm)
iter <- iter+1
}
Error in while ((vsd > 1) && (iter < itermax)) { :
missing value where TRUE/FALSE needed
當它達到收斂是爲了節省時間停止主要思想雖然ABO作爲一個簡單的平均函數的例子很快,我原來的函數需要大量的時間來做迭代,我想在收斂時停下來。在你的代碼
你只要循環爲'標準偏差outm'大於1。然而,你的第一次迭代'outm'將有長度後1和標準差0,導致您的循環終止。 – josliber
開始outm'作爲一個長矢量,說10K。如果迭代索引超出範圍,請在循環中檢查另一個10K的循環。收斂後修剪NA。不用說,你需要初始化並增加'i'。這將最大限度地減少'outm'從零開始重寫的次數。 – ilir
看看是否有幫助:https://stat.ethz.ch/pipermail/r-help/2010-June/241386.html – SHRram