模拟投掷硬币一周?

Fra*_*fka 4 simulation r probability coin-flipping

这不是功课.我有兴趣在R中设置一个投掷硬币的模拟.我想将模拟运行一周.R中是否有一个函数可以让我在一周的时间内启动和停止模拟?如果一切顺利,我可能想要增加模拟周期的长度.

例如:

x <- rbinom(10, 1, 1/2)
Run Code Online (Sandbox Code Playgroud)

因此,为了澄清,而不是上面的代码中的10,我如何保持模拟一周(一周的试验次数与试验的设定次数)?谢谢.

And*_*rie 11

以下代码将继续运行三秒钟,然后停止并打印总计.

x <- Sys.time()
duration <- 3 # number of seconds
heads <- 0
tails <- 0

while(Sys.time() <= x + duration){
  s <- sample(0:1, 1)
  if(s == 1) heads <- heads+1 else tails <- tails+1
  cat(sample(0:1, 1))
}
cat("heads: ", heads)
cat("tails: ", tails)
Run Code Online (Sandbox Code Playgroud)

结果:

001100111000011010000010110111111001011110100110001101101010 ...
heads:  12713
tails:  12836
Run Code Online (Sandbox Code Playgroud)

警告提示:

以我的机器速度,我打赌你在本周结束前很久就会出现浮点错误.换句话说,您可以获得机器允许您存储为整数,双精度,浮点数或任何正在使用的值的最大值,然后您的代码将崩溃.

因此,您可能需要构建一些错误检查或翻转机制来保护您免受此攻击.


有关将要发生的事情的加速说明,请尝试以下操作:

x <- 1e300
while(is.finite(x)){
  x <- x+x
  cat(x, "\n")
}
Run Code Online (Sandbox Code Playgroud)

R优雅地处理浮点重载,并返回Inf.

因此,无论您在模拟中获得的数据现在都丢失了.无法将无穷大分析到任何合理的程度.

在设计模拟时请记住这一点.

  • 这不是关于内存管理.这是关于计算机如何存储价值的.在任何程序员手册中阅读有关整数和浮点值的信息,例如http://en.wikipedia.org/wiki/Floating_point.在我的代码中,我只存储了两个值.这永远不会耗尽内存.但是你可能仍然会得到一个浮点错误(或者R的等价物.) (3认同)