在使用R的if / else语句中计数器?

时间:2013-01-22 19:04:17

标签: r if-statement for-loop counter

我对R和编程相对较新,我想知道是否有办法在for循环中将if计数器放入if else语句中。我在for循环中有以下if / else语句:

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

有没有办法计算循环在迭代过程中选择“if”选项的次数(即Gibbsalph [,t] = alphcandidate的次数)?

非常感谢!

2 个答案:

答案 0 :(得分:3)

这可能很有用,因为它避免了创建全局变量i。见Examples of the perils of globals in R and 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

答案 1 :(得分:0)

这就是你现在所拥有的:

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

假设你的循环超过序列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])