R Mar模拟的帮助

时间:2018-07-30 14:52:14

标签: r statistics

我正在尝试在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)

2 个答案:

答案 0 :(得分:1)

错误:

  • 第13行:不应该是runif(1) = p,也许您是说runif(1) < p
  • 第15行:我怀疑您是说amount_bet <- c而不是amount_bet <- amount_bet
  • 第21行:应该是i==100而不是i=100
  • 第26行:}应该移到return()行之前

不影响代码执行但应更改的内容:

  • 第16行:将写} else {更改为一行是一种很好的编程习惯
  • 第24行:您应将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){}

那不是双等号吗?