Simulate coin toss for one week?

五迷三道 提交于 2019-12-10 16:34:45

问题


This is not homework. I am interested in setting up a simulation of a coin toss in R. I would like to run the simulation for a week. Is there a function in R that will allow me to start and stop the simulation over a time period such as a week? If all goes well, I may want to increase the length of the simulation period.

For example:

x <- rbinom(10, 1, 1/2)

So to clarify, instead of 10 in the code above, how do I keep the simulation going for a week (number of trials in a week versus set number of trials)? Thanks.


回答1:


Here is code that will continue to run for three seconds, then stop and print the totals.

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)

The results:

001100111000011010000010110111111001011110100110001101101010 ...
heads:  12713
tails:  12836

Note of warning:

At the speed of my machine, I bet that you get a floating point error long before the end of the week. In other words, you may get to the maximum value your machine allows you to store as an integer, double, float or whatever you are using, and then your code will crash.

So you may have to build in some error checking or rollover mechanism to protect you from this.


For an accelerated illustration of what will happen, try the following:

x <- 1e300
while(is.finite(x)){
  x <- x+x
  cat(x, "\n")
}

R deals with the floating point overload gracefully, and returns Inf.

So, whatever data you had in the simulation is now lost. It's not possible to analyse infinity to any sensible degree.

Keep this in mind when you design your simulation.




回答2:


While now is smaller than a week later time stamp append to 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> }



回答3:


You may be interested in the fairly new package harvestr by Andrew Redd. It splits a task into pieces (the idea being that pieces could be run in parallel). The part of the package that applies to your question is that it caches results of the pieces that have already been processed, so that if the task is interupted and restarted then those pieces that have finished will not be rerun, but it will pick up on those that did not complete (pieces that were interupted part way through will start from the beginning of that piece).

This may let you start and stop the simulation as you request.



来源:https://stackoverflow.com/questions/11157870/simulate-coin-toss-for-one-week

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!