Вот код, который будет продолжать работать в течение трех секунд, затем остановится и распечатает итоги.
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
.
Итак, все данные, которые у вас были при моделировании, теперь потеряны. Невозможно сколько-нибудь разумно проанализировать бесконечность.
Помните об этом, когда будете проектировать симуляцию.
person
Andrie
schedule
22.06.2012