这不是作业。我有兴趣建立一个模拟投币在R.我想运行一个星期的模拟。在R中是否有一个函数,允许我在一周的时间内开始和停止模拟?如果一切顺利,我可能想增加模拟周期的长度。
例如:
x <- rbinom(10, 1, 1/2)因此,为了澄清,而不是上面代码中的10,我如何使模拟持续一周(一周内的试验次数与设定的试验次数)?谢谢。
发布于 2012-06-22 14:23:47
下面是将继续运行3秒的代码,然后停止并打印总数。
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)结果:
001100111000011010000010110111111001011110100110001101101010 ...
heads: 12713
tails: 12836警告备注:
以我的机器速度,我打赌在周末之前你会得到一个浮点错误long。换句话说,您可能会得到机器允许您将其存储为整数、双倍、浮点或任何您正在使用的任何东西的最大值,然后您的代码就会崩溃。
因此,您可能必须构建一些错误检查或滚转机制,以保护您不受此影响。
为了加速说明将要发生的事情,请尝试如下:
x <- 1e300
while(is.finite(x)){
x <- x+x
cat(x, "\n")
}R优雅地处理浮点重载,并返回Inf。
所以,你在模拟中得到的任何数据现在都丢失了。分析无穷大是不可能达到任何合理程度的。
在设计您的模拟时,请记住这一点。
发布于 2012-06-22 14:24:52
而现在小于一周后,时间戳附加到x rbinmo(1,1,1/2)
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> }发布于 2012-06-22 19:24:46
您可能对Andrew的相当新的包harvestr感兴趣。它将一项任务分成几个部分(其思想是可以并行运行)。包中适用于您的问题的部分是,它缓存已经处理过的部分的结果,因此如果任务被插入并重新启动,那么那些已经完成的部分将不会被重新运行,但是它会对那些没有完成的部分进行选择(部分插入的部分将从该部分的开头开始)。
这可以让您根据需要启动和停止模拟。
https://stackoverflow.com/questions/11157870
复制相似问题