Ошибка возникает в следующем разделе:
inter[[3]][1] > p & inter[[3]][2] < p
Используя браузер () или построчно запуская код, вы заметите, что
confidence_interval <- list(c(mean_estimate - 1.96*s_estimate/sqrt(si),
mean_estimate + 1.96*s_estimate/sqrt(si)))
возвращает сам список.Так что, если вы хотите взять части сами, это должны быть inter[[3]][[i]][1]
и inter[[3]][[i]][2]
соответственно.
Возможны несколько оптимизаций, я, скорее всего, отредактирую этот комментарий в последнее время с несколькими предложениями.:-)
::: Edit ::: Несколько более глубокий ответ.Функции r[dens]
в R связаны с некоторыми издержками.В качестве такого простого способа ускорения кода можно запустить все симуляции один раз и выполнить вычисления для подмножеств умным способом.Ниже показан один из способов (если имитация находится в пределах памяти), вставка всего в матрицу и последующее использование rowMeans для быстрого вычисления необходимой информации.
draw_sample <- function(s = 1, r = 1, p = .5){
samples <- matrix(rbinom(n = r * s, size = 1, p = p), ncol = s, nrow = r, byrow = TRUE)
mean_p <- rowMeans(samples)
mean_s <- mean_p * (1 - mean_p)
bound = 1.96 * mean_s / sqrt(s)
mean_c <- mean(ifelse(mean_p - bound < p & mean_p + bound > p, 1, 0))
list(mean_p = mean(mean_p), mean_s = mean(mean_s), mean_c = mean_c)
}