#r #parallel-processing
Вопрос:
Я пытаюсь запустить повторное моделирование в R параллельно, чтобы ускорить время обработки (в настоящее время выполнение кода займет около 2 недель). У меня есть все предварительно сгенерированные данные, но подгонка модели занимает целую вечность. Как я могу использовать параллельную обработку для ускорения этого процесса?
В настоящее время у меня есть:
results = matrix(NA,num_sims,129)
for (simulation in 1:length(df)){
LPA1=mplusobject("stuff", rdata = df)
lpa1_fit = mplusModeler(lpa1, "df.dat", modelout = "lpa1.inp"
results[simulation,1] = lpa1_fit$results$summaries$BIC
results[simulation,2] = lpa1_fit$results$summaries$AIC
LPA2=mplusobject("stuff", rdata = df)
lpa2_fit = mplusModeler(lpa2, "df.dat", modelout = "lpa2.inp"
results[simulation,3] = lpa2_fit$results$summaries$BIC
results[simulation,4] = lpa2_fit$results$summaries$AIC
AND SO ON
}
I get the concept of running this in parallel, but I just can't figure out how to actually execute it.
Комментарии:
1. Вот документация для пакета foreach cran.r-project.org/web/packages/foreach/foreach.pdf И снег cran.r-project.org/web/packages/snow/snow.pdf
2. Часть 1: Это распространенное заблуждение, но
foreach()
оно не заменяет конструкцию для цикла. Вместо этого это альтернатива функциям сокращения карты, таким какlapply()
иpurrr::map()
. Итак, чтобы решить вашу проблему, пока игнорируйте распараллеливание и выясните, как переписать код для использованияy <- lapply(...)
илиy <- purrr::map(...)
вместо цикла for. См. < jottr.org/2019/01/11/… > для прохода.3. Часть 2. Когда вы переписали свой код как
y <- lapply(...)
вызов, вы находитесь в гораздо лучшем положении для написанияy <- foreach(...) %dopar% { ... }
вызова. Или просто используйтеy <- future_lapply(...)
илиy <- furrr::future_map(...)
распараллеливайте свой код.