次のコードは、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
警告のメモ:
私のマシンの速度では、週末のずっと前に浮動小数点エラーが発生するに違いありません。言い換えれば、マシンが整数、倍精度浮動小数点数、または使用しているものとして格納できる最大値に達すると、コードがクラッシュする可能性があります。
そのため、これを防ぐために、何らかのエラー チェックまたはロールオーバー メカニズムを組み込む必要がある場合があります。
何が起こるかを簡単に説明するには、次のことを試してください。
x <- 1e300
while(is.finite(x)){
x <- x+x
cat(x, "\n")
}
R は浮動小数点のオーバーロードを適切に処理し、 を返しますInf
。
したがって、シミュレーションで持っていたデータはすべて失われます。無限を賢明な程度に分析することは不可能です。
シミュレーションを設計するときは、このことを念頭に置いてください。