3

コイントスなど、ランダムな結果を生成しようとしています。この A/B または表裏ジェネレーターを、同じ結果 x が連続して得られるまで実行したいと思います。

私はコイントスのためにこのコードをオンラインで見つけました:

sample.space <- c(0,1)
theta <- 0.5 # this is a fair coin
N <- 20 # we want to flip a coin 20 times
flips <- sample(sample.space, 
size=N,
replace=TRUE,
prob=c(theta,1-theta))

これは 20 回のフリップを生成するために機能しますが、私がやりたいことは、同じ結果の x が連続して得られるまで「フリップ シミュレーター」を実行することです。

4

3 に答える 3

2

1 つの方法として、多数のコイン投げを生成し、次のrle関数を使用して、指定された数の連続した投げを初めて取得する時間を特定することができます。

first.consec <- function(num.consec, num.flip) {
  flips <- sample(0:1, size=num.flip, replace=TRUE, prob=c(0.5, 0.5))
  r <- rle(flips)
  pos <- head(which(r$lengths >= num.consec), 1)
  if (length(pos) == 0) NA  # Did not get any runs of specified length
  else sum(head(r$lengths, pos-1))
}
set.seed(144)
first.consec(10, 1e5)
# [1] 1209
first.consec(10, 1e5)
# [1] 2293
first.consec(10, 1e5)
# [1] 466
于 2015-07-26T18:20:44.923 に答える
0

@nongkrongの回答より少し長いですが、実際にはいくつかの出力が得られます:

n <- 5
out <- 2
tmp2 <- 2
count <- 0
while (count < n-1) {
    tmp <- sample(0:1,1)
    out <- rbind(out, tmp)
    ifelse(tmp == tmp2, count <- count+1, count <- 0)
    tmp2 <- tmp
}
out <- data.frame(CoinFlip=out[-1])
out

例:

> out
  CoinFlip
1        1
2        0
3        1
4        0
5        0
6        0
7        0
8        0
于 2015-07-27T14:11:56.837 に答える