1

我的模拟实验如下:

  1. 掷一个公平的骰子,得到一个介于 1 到 6 之间的数字 X。
  2. 将一枚公平的硬币翻转 X 次(即掷骰子的数量)并记录正面的数量。

这是我的实验的代码(在循环内):

Youtcomes <- rep(0, 100)
for (i in 1:100) {
    X <- sample(1:6, 1, replace=TRUE, rep(1,6)/6)
    Y <- sample(c("H", "T"), X, replace=TRUE, rep(1,2)/2)
    # assign output inside the loop with [i] indexing
    Youtcomes[i] <- sum(Y == "T")
}

我确信这不是最有效的循环,但不幸的是,我被指示这样做。

然后我需要创建一个随机变量 N,它定义为实验的运行次数,直到Y>=5第一次出现结果。

我将如何设计一个循环来模拟这个值?

4

1 回答 1

2

while您可以按如下方式使用循环:

one.simulation <- function() {
    N <- 0
    Y <- 0
    while (Y < 5) {
        X <- sample(6, 1)
        Y <- sum(sample(c(Heads = 1, Tails = 0), X, replace=TRUE))
        N <- N+1
    }
    N
}

set.seed(1234)
one.simulation()
# [1] 50

replicate(100, one.simulation())
#   [1]  20   9  11  57  35  35  14 106  11  14   6 113   8  28 125  29   4  12   3
#  [20]  19  39   4  13  32  23  96  19  20  47  68  96  65  18  71  39  51   6  22
#  [39] 111   3 109   9  22  18  99   1 151  85   3   2 102  46  18  31  41  21  14
#  [58]  75  10  56   3  63  79  12  59  68  31  47  35  15  14  38  11  36  26  24
#  [77]  24  45  43  15  81   1  16  57  29   6  64  11  15  47 107 116   8  62 146
#  [96] 217  78  28   9 141
于 2013-03-07T12:00:27.510 回答