我对 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 多少次),同时进行迭代?
非常感谢!
我对 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 多少次),同时进行迭代?
非常感谢!
这可能很有用,因为它避免了创建全局变量 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
这是你现在得到的:
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])