0

私はRとプログラミング全般に比較的慣れていないため、forループのif elseステートメント内にカウンターを配置する方法があるかどうか疑問に思っていました. for ループ内に次の if/else ステートメントがあります。

if(runif(1)<min(1,r)) {
Gibbsalph[,t]=alphcandidate
} else{
Gibbsalph[,t]=Gibbsalph[,t-1]
}

反復を進めている間に、ループが「if」オプションを選択した回数 (つまり、Gibbsalph[,t]=alphcandidate の回数) をカウントする方法はありますか?

どうもありがとう!

4

2 に答える 2

3

これは、グローバル変数 i の作成を回避するので便利です。R および Stata におけるグローバルの危険性の例を参照してください。

init.counter <- function(){
  x <- 0
  function(){
    x <<- x + 1
    x
   }
}  #source: hadley wickham

> counter1 <- init.counter()
> 
> counter1()
[1] 1
> counter1()
[1] 2
> 

反復せずにカウンターの値にアクセスするには、次のようにします。

environment(counter1)$x

したがって、次のようになります。

counter2 <- init.counter()
if(runif(1)<min(1,r)) {
counter2()
Gibbsalph[,t]=alphcandidate
} else{
Gibbsalph[,t]=Gibbsalph[,t-1]
}
environment(counter2)$x
于 2013-01-22T19:25:34.340 に答える
0

これがあなたが今持っているものです:

if(runif(1)<min(1,r))

ループが sequence を超えていると仮定すると、次のようになりjj = 1:tます。

alltests <- runif(t) < min(1,r)  #vector of TRUE, FALSE
wincount <- sum(alltests)

そしてループの中で、

Gibbsalph[,t] <- alphcandidate * alltests[jj] + Gibbsalph[,t-1]*(!alltests[jj])
于 2013-01-22T19:47:23.230 に答える