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循环,但我似乎无法正确构造,因此我希望在我创建的函数中使用replicate命令,但是我收到以下错误:
“评估嵌套太深:无限递归/选项(表达式=)? 换行时出错:评估嵌套太深:无限递归/选项(表达式=)“
我哪里错了?我想返回一个包含上述模拟的100个结果的向量,其中玩游戏直到获得50个利润或25个失败,以先发生者为准。如果先前的结果均未发生,则采用矢量的最终值。
答案 0 :(得分: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)