По крайней мере j
-loop можно векторизовать (используя runif(i, 0, 1)
вместо вызова runif(1, 0, 1)
для i
раз).Кроме того, не увеличивайте результирующий вектор proportion_heads
.Его размер известен, так что вы можете предварительно выделить его и заполнить.
flip_experiment <- function(prob_heads, n_flips) {
proportion_heads <- numeric(n_flips)
for (i in 1:n_flips) {
count <- sum(runif(i, 0, 1) <= prob_heads)
proportion_heads[i] <- count / i
}
plot(1:n_flips, proportion_heads)
}
flip_experiment(0.3, 1000);
flip_experiment(0.03, 1000);
Вторая мысль:
flip_experiment <- function(prob_heads, n_flips) {
proportion_heads <- cumsum(runif(n_flips, 0, 1) <= prob_heads) / seq_len(n_flips)
plot(1:n_flips, proportion_heads)
}