Должен ли я использовать sapply для запуска симуляций, которые не требуют аргументов? - PullRequest
0 голосов
/ 04 апреля 2020

Я запускаю симуляцию тысячи раз, которая не требует никаких аргументов. Вот очень простой пример:

simulate <- function() sum(sample(1:10, size = 5))

Я мог бы запустить

results <- rep(0,1000)
for(i in 1:1000){
  results[i] <- simulate()
}

... но я много раз читал, что циклы for в R медленны, и мне нужно максимизировать скорость (фактическое моделирование, которое я выполняю, требует гораздо больше времени).

  1. Должен ли я использовать члена семейства apply на results, и если да, то как?
  2. Является ли sapply все еще быстрее, чем для l oop, если элементы results не используются в функции имитации?

1 Ответ

1 голос
/ 04 апреля 2020

Вы можете использовать sapply для этого, но обычно для таких случаев я предпочитаю replicate.

set.seed(123)
replicate(10, simulate())
#[1] 29 24 27 29 29 19 22 31 28 23

Вы также можете использовать rerun в purrr, который ведет себя так же, как replicate.


Использование sapply будет аналогично анонимной функции.

sapply(1:10, function(X) simulate())
...