R-无限递归误差 - 如何解决



仍然是R的新手想要在函数本身中重复100次模拟。这将有效地转向[i],它以指定函数概率返回结果-1或1:

game = function(n,pr) {
turn = cumsum(2*rbinom(n,1,prob=pr)-1)
bankrupcy.test = which(turn == -25)
winner.test = which(turn == 50)
if(length(bankrupcy.test)==0){bankrupcy.test=c(0)}
if(length(winner.test)==0){winner.test=c(0)}
if(bankrupcy.test==0 && winner.test==0){turn[n]}else
if(bankrupcy.test[1]>winner.test[1]){-25}else{
50}
return(replicate(100,game(n)))
}

我尝试过创建一个for循环,但我似乎无法正确构建,因此我希望在我创建的函数中使用重复命令,但是我收到以下错误:

"评估太深了:无限递归/选项(表达式=)?包裹期间的错误:评估太深了:无限递归/选项(表达式=)"

我要去哪里?我想返回具有上述模拟的100个结果的向量,在该矢量中,游戏将在游戏中进行,直到获得50次利润或造成25损失,以首先发生。如果以前的结果都没有发生,则进行向量的最终值。

尝试以下:

n <- 1000
pr <- 0.50
game <- function(n, pr) {
  result = 
    replicate(100, {{turn = cumsum(2*rbinom(n, 1,prob=pr)-1)
      bankrupcy.test = which(turn == -25)
      winner.test = which(turn == 50)
      if(length(bankrupcy.test)==0){bankrupcy.test = 0}
      if(length(winner.test)==0){winner.test = 0}
      if(bankrupcy.test==0 && winner.test==0){turn[n]} else
        if(bankrupcy.test[1]>winner.test[1]) {-25} else {50}
      }})
  return(result)
}
game(n, pr)

最新更新