0

对 R 来说还是新手,所以尝试练习使用函数,我创建了一些(可能效率很低)代码,稍后我将对其进行修改,目前它返回我需要的结果,但我想在函数本身内重复模拟 100 次. 这实际上是 turn[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 的损失,以先发生者为准。如果前面的结果都没有发生,则采用向量的最终值。

4

1 回答 1

1

尝试这个:

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)
于 2017-03-10T23:53:39.140 回答