Вы должны использовать replicate
, а не rep
.
poi_bar <- function(n, N, lambda) {
V <- replicate(N, mean(rpois(n, lambda = lambda)))
V
}
set.seed(1234)
poi_bar(8, 25, 17)
Редактировать.
Хотя ответ уже был принят, я понял, что есть лучшее,более быстрый способ сделать то же самое.
Функции colMeans
и rowMeans
значительно быстрее, чем повторные применения mean
, поэтому далее проверяется, верно ли это в этом случае использования.
Обратите внимание, что функция poi_bar
такая же, как указано выше, но для того, чтобы сделать время честным, я переписал ее как однострочную.Оригинал более понятен.
poi_bar = function(n, N, lambda) {
replicate(N, mean(rpois(n, lambda = lambda)))
}
poi_bar2 = function(n, N, lambda) {
colMeans(replicate(N, rpois(n, lambda = lambda)))
}
Теперь проверьте их и убедитесь, что результаты идентичны.
set.seed(1234)
p <- poi_bar(8, 2500, 17)
set.seed(1234)
p2 <- poi_bar2(8, 2500, 17)
identical(p, p2)
#[1] TRUE
И время.Я буду использовать два пакета CRAN, microbenchmark
и ggplot2
для отображения результатов.
library(ggplot2)
library(microbenchmark)
mb <- microbenchmark(
v1 = poi_bar(8, 2500, 17),
v2 = poi_bar2(8, 2500, 17)
)
print(mb)
autoplot(mb)
![enter image description here](https://i.stack.imgur.com/l3nZd.png)