首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟掷硬币一周?

模拟掷硬币一周?
EN

Stack Overflow用户
提问于 2012-06-22 14:10:10
回答 3查看 2K关注 0票数 4

这不是作业。我有兴趣建立一个模拟投币在R.我想运行一个星期的模拟。在R中是否有一个函数,允许我在一周的时间内开始和停止模拟?如果一切顺利,我可能想增加模拟周期的长度。

例如:

代码语言:javascript
复制
x <- rbinom(10, 1, 1/2)

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-22 14:23:47

下面是将继续运行3秒的代码,然后停止并打印总数。

代码语言:javascript
复制
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)

结果:

代码语言:javascript
复制
001100111000011010000010110111111001011110100110001101101010 ...
heads:  12713
tails:  12836

警告备注:

以我的机器速度,我打赌在周末之前你会得到一个浮点错误long。换句话说,您可能会得到机器允许您将其存储为整数、双倍、浮点或任何您正在使用的任何东西的最大值,然后您的代码就会崩溃。

因此,您可能必须构建一些错误检查或滚转机制,以保护您不受此影响。

为了加速说明将要发生的事情,请尝试如下:

代码语言:javascript
复制
x <- 1e300
while(is.finite(x)){
  x <- x+x
  cat(x, "\n")
}

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

所以,你在模拟中得到的任何数据现在都丢失了。分析无穷大是不可能达到任何合理程度的。

在设计您的模拟时,请记住这一点。

票数 11
EN

Stack Overflow用户

发布于 2012-06-22 14:24:52

而现在小于一周后,时间戳附加到x rbinmo(1,1,1/2)

代码语言:javascript
复制
R> week_later <- strptime("2012-06-22 16:45:00", "%Y-%m-%d %H:%M:%S")
R> x <- rbinom(1, 1, 1/2) // init x
R> while(as.numeric(Sys.time()) < as.numeric(week_later)){
R>   x <- append(x, rbinom(1, 1, 1/2))
R> }
票数 3
EN

Stack Overflow用户

发布于 2012-06-22 19:24:46

您可能对Andrew的相当新的包harvestr感兴趣。它将一项任务分成几个部分(其思想是可以并行运行)。包中适用于您的问题的部分是,它缓存已经处理过的部分的结果,因此如果任务被插入并重新启动,那么那些已经完成的部分将不会被重新运行,但是它会对那些没有完成的部分进行选择(部分插入的部分将从该部分的开头开始)。

这可以让您根据需要启动和停止模拟。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11157870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档