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)