【问题标题】:Monte Carlo for 3 or more consecutive facesMonte Carlo 用于 3 个或更多连续面
【发布时间】:2020-10-12 16:45:51
【问题描述】:

我编写此代码是为了在 100000 次迭代的模拟中检查 3 个或更多连续的面,其中包含 5 个公平骰子。我认为它在正确的轨道上,但我错过了一些东西。我不断收到缺失值错误:

nrep = 500000
count = 0
for (i in 1:nrep) {
  roll = sample(6, 5)
  print(roll)
  if (roll[i] == roll[i+1] & roll[i+1] == roll[i+2]) count = count + 1
}
print(count)

请就仅使用基础 R 的修正提出建议。

【问题讨论】:

  • 您正在索引长度为 5 (roll) 的值,其值可以与 nrep 一样大。我正在考虑另一种解决方案(将在几分钟内作为答案发布)。编辑:默认情况下,您也是使用sample(),它有replace=FALSE。这意味着您永远不会看到连续的面孔,因为没有数字可以重复。

标签: r statistics montecarlo


【解决方案1】:

添加到我的评论中,您可以使用函数rle() 来计算向量中等值运行的长度和值。您可以执行以下操作

nrep = 500000
count = 0
for (i in 1:nrep) {
  roll = sample(6, 5, replace = TRUE)
  roll_rle = rle(roll)
  if (any(roll_rle$lengths >= 3)) {
    print(roll)
    count = count + 1
  }
}

【讨论】:

  • 这似乎按我的预期工作!谢谢你,@Tomas!
猜你喜欢
  • 2015-06-19
  • 1970-01-01
  • 2018-06-07
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 2017-05-15
相关资源
最近更新 更多