Имитировать серию кода n (допустим, 1000) раз при сохранении результата в векторе в R

#r #simulation

#r #Симуляция

Вопрос:

Я все еще относительно новичок в R, поэтому я борюсь с повторением строк кода несколько раз и сохранением результата для каждого повторения.

Цель состоит в том, чтобы случайным образом (с равной вероятностью) назначить количество событий, в моем случае 100, за 20-летний период. Поскольку дни не имеют значения, я использую количество месяцев для определения периода. Впоследствии я подсчитываю события за каждый 24-месячный период в течение 20 лет. Наконец, извлекая максимальное количество событий, происходящих в течение 24-месячного периода.

Несмотря на беспорядок и, вероятно, неэффективность, код работает по назначению. Однако я хочу повторить этот процесс 1000 раз, чтобы получить распределение всего максимального количества событий, происходящих за 24 месяца, для сравнения с моими реальными данными.

вот мое кодирование на данный момент:

 library(runner)
library(dplyr)

#First I set the period from the year 2000 to 2019 with one-month increments. 
period <- seq(as.Date("2000/1/1"), by = "month", length.out = 240)

#I sample random observations assigned to different months over the entire period. 
u <- sample(period, size=100, replace=T)

#Make a table in order to register the number of occurrences within each month. 
u <- table(u)

#Create a data frame to ease information processing. 
simulation <- data.frame(u)

#Change the date column to date format. 
simulation$u <- as.Date(simulation$u)

#Compute number of events taking place within every 24-month period (730 = days in 24 months). 
u <- u %>%
  mutate(
    Last_24_month_total = sum_run(
      x = simulation$Freq, 
      k = 730, 
      idx = as.Date(simulation$u, format = "%d/%m/%Y"))
  )

#extract the maximum number of uccurences within a 24 month period
max <- max(u$Last_24_month_total)
  

Может ли кто-нибудь помочь мне понять, как переписать этот процесс, чтобы облегчить тысячу повторений при сохранении максимального значения для каждого повторения?
Спасибо

Комментарии:

1. в конце концов, вы можете использовать replicate()

Ответ №1:

Как @jogo предложил в комментариях, вы можете использовать replicate .

Я упростил ваш код.

 library(runner)
library(dplyr)

seq_dates <- seq(as.Date("2000/1/1"), by = "month", length.out = 240)

replicate(100,
          seq_dates %>% 
           sample(100, replace = TRUE) %>% 
           table() %>% 
           sum_run(730, idx = as.Date(names(.))) %>% 
           max)