我正在尝试在R中进行mar模拟,在此我下注一个数量,如果赢了,我下注相同的数量,但是如果输了,我下注两倍。我这样做直到我用光了钱或下注100次。然后,我必须进行100次the模拟。应用代码时,出现以下错误;
错误:“}”中出现意外的'}'(我认为所有方括号都已考虑在内)
martingale_function(m,c,n,p)中的错误: 找不到函数“ martingale_function”
(我不知道为什么会收到此错误)
m = amount to bet
c = initial bet
n= number of round
p = probability of winning
martingale_function <- function(m,c,n,p){
for(i in 1:n){
betting_money <- m
amount_bet <- c
end_Sim <- FALSE
while(!end_Sim){
if(runif(1) = p){
betting_money <- betting_money + amount_bet
amount_bet <- amount_bet
}
else {
betting_money <- betting_money - amount_bet
amount_bet <- amount_bet*2
}
if(betting_money <= 0|i=100){# if we have no more money left to bet or have done it 100 times we stop
end_Sim <- TRUE
}
} return(betting_money)
}
}
iteration_function <- function(m,c,n,p){
for(i in 1:100){
return(data.frame(Iteriation=i,AmountLeft = martingale_function(m,c,n,p)))
}
}
iteration_function(650,5,100,18/38)
答案 0 :(得分:1)
错误:
runif(1) = p
,也许您是说runif(1) < p
?amount_bet <- c
而不是amount_bet <- amount_bet
i==100
而不是i=100
}
应该移到return()
行之前不影响代码执行但应更改的内容:
} else {
更改为一行是一种很好的编程习惯return()
移至其自己的行此外,我不确定为什么有两个for
循环。看来您只需要一个。
这是我对您的代码的重写(对您要执行的操作有一些假设):
# write betting function
martingale <- function(m, c, p) {
money <- m
betsize <- c
i <- 1
while(money > 0 & i <= 100) {
if(runif(1) < p) {
money <- money + betsize
betsize <- c
} else {
money <- money - betsize
betsize <- betsize * 2
}
i <- i + 1
}
return(money)
}
# run it 100 times
n <- 100
res_df <- data.frame(iteration = rep(NA_integer_, n), amountleft = rep(NA_real_, n))
for (i in 1:n) {
res_df[i , "iteration"] <- i
res_df[i , "amountleft"] <- martingale(m=650, c=5, p=18/38)
}
答案 1 :(得分:0)
查看您写的行:
if(runif(1) = p){}
那不是双等号吗?