R - Параллелизация обучения нескольких моделей (с dplyr и purrr)
Это продолжение предыдущего вопроса об изучении нескольких моделей.
Вариант использования заключается в том, что у меня есть несколько наблюдений для каждого объекта и
Я хочу подготовить модель для каждого из них. См. Hadley отличная презентация о том, как это сделать.
Короче говоря, это можно сделать с помощью dply
и purr
следующим образом:
library(purrr)
library(dplyr)
library(fitdistrplus)
dt %>%
split(dt$subject_id) %>%
map( ~ fitdist(.$observation, "norm"))
Итак, поскольку построение модели является неловко параллельной задачей, я был
интересно, если dplyr
, purrr
имеют простой в использовании механизм распараллеливания для таких задач (например, параллельный map
).
Если эти библиотеки не обеспечивают легкую распараллеливание, это может быть сделано с использованием классических библиотек распараллеливания R (parallel
, foreach
и т.д.)?
Ответы
Ответ 1
Просто добавив ответ для полноты здесь, вам нужно будет установить multidplyr из репозитория Hadley, чтобы запустить его, больше информации в vignette:
library(dplyr)
library(multidplyr)
library(purrr)
cluster <- create_cluster(4)
set_default_cluster(cluster)
cluster_library(cluster, "fitdistrplus")
# dt is a dataframe, subject_id identifies observations from each subject
by_subject <- partition(dt, subject_id)
fits <- by_subject %>%
do(fit = fitdist(.$observation, "norm")))
collected_fits <- collect(fits)$fit
collected_summaries <- collected_fits %>% map(summary)