【问题标题】:Trying to call a function 1000 times with replicate尝试使用复制调用函数 1000 次
【发布时间】:2020-11-13 14:13:43
【问题描述】:
simulate <- function(bankroll, bet, max_iterations) { #gambler's ruin function 
  iteration = 1 
  while (bankroll > 0 & iteration < max_iterations) {
    win <- sample(0:1, size = 1) #either loos or win 
    if (win) {
      bankroll <- (bankroll + bet)
    } else {
      bankroll <- (bankroll - bet)
    }
    iteration <- iteration + 1 
  } 
  return(list(c(iteration, bankroll))) 
} 

simulate(1000, 100, 100) 

我试图调用上述函数 1000 次来获取向量。然后我需要计算有多少次迭代小于 100。有什么建议吗?谢谢

【问题讨论】:

  • 请不要重复发布相同的问题。考虑删除您的last one

标签: r function call


【解决方案1】:

这可以简单地简化为:

simulate <- function(bankroll, bet, max_iterations){
         bankroll + bet * sum(sample(c(-1, 1), max_iterations, TRUE))
}

那么你可以这样做:

sum(replicate(1000, simulate(1000, 100, 100))<100)

【讨论】:

  • 谢谢 Onyambu,请你解释一下你对我做了什么。我很想正确学习:)
【解决方案2】:

这是一个使用base的简单版本

simulate <- function(bankroll, bet, max_iterations) { #gambler's ruin function 
  iteration = 1 
  while (bankroll > 0 & iteration < max_iterations) {
    win <- sample(0:1, size = 1) #either loos or win 
    if (win) {
      bankroll <- (bankroll + bet)
    } else {
      bankroll <- (bankroll - bet)
    }
    iteration <- iteration + 1 
  } 
  return(bankroll)
} 

calls <- replicate(n = 1000,expr = simulate(1000, 100, 100))

calls_less_100 <- calls < 100

result <- length(calls[calls_less_100])

result    

probability <- result/length(calls)

probability

【讨论】:

  • 嗨,布鲁诺,我在第 2 行调用了一个错误 call_less_100
  • 对不起,您需要将复制功能更改为只返回资金
  • 谢谢你:) 我可以请你一个忙。我可能还有更多问题可以问你吗?我想学习。
  • 当然,如果是同样的问题,请在这里问,否则您可以在新问题中向我提问,您也可以投票并接受答案
  • 非常感谢。我想现在找到概率。我需要将结果/资金与函数的返回分开。当资金在函数中而不是在环境中时,我如何获得该资金?
猜你喜欢
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多