R - 并行化多模型学习(使用 dplyr 和 purrr)
R - Parallelizing multiple model learning (with dplyr and purrr)
这是关于学习多个模型的 的后续。
用例是我对每个主题都有多个观察结果,并且
我想为他们每个人训练一个模型。请参阅 Hadley 的 excellent presentation 了解如何执行此操作。
简而言之,可以像这样使用 dplyr
和 purrr
:
library(purrr)
library(dplyr)
library(fitdistrplus)
dt %>%
split(dt$subject_id) %>%
map( ~ fitdist(.$observation, "norm"))
因此,由于模型构建是一项令人尴尬的并行任务,我
想知道 dplyr
、purrr
是否有针对此类任务的易于使用的并行化机制(如并行 map
)。
如果这些库不提供简单的并行化,是否可以使用经典的 R 并行化库(parallel
、foreach
等)来完成?
只是在这里添加一个完整的答案,您将需要安装 multidplyr from Hadley's repo to run this, more info in the 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)
现在有 furrr
包,例如:
library(dplyr)
library(furrr)
plan(multiprocess)
dt %>%
split(dt$subject_id) %>%
future_map(~fitdist(.$observation, "norm"))
这是关于学习多个模型的
用例是我对每个主题都有多个观察结果,并且 我想为他们每个人训练一个模型。请参阅 Hadley 的 excellent presentation 了解如何执行此操作。
简而言之,可以像这样使用 dplyr
和 purrr
:
library(purrr)
library(dplyr)
library(fitdistrplus)
dt %>%
split(dt$subject_id) %>%
map( ~ fitdist(.$observation, "norm"))
因此,由于模型构建是一项令人尴尬的并行任务,我
想知道 dplyr
、purrr
是否有针对此类任务的易于使用的并行化机制(如并行 map
)。
如果这些库不提供简单的并行化,是否可以使用经典的 R 并行化库(parallel
、foreach
等)来完成?
只是在这里添加一个完整的答案,您将需要安装 multidplyr from Hadley's repo to run this, more info in the 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)
现在有 furrr
包,例如:
library(dplyr)
library(furrr)
plan(multiprocess)
dt %>%
split(dt$subject_id) %>%
future_map(~fitdist(.$observation, "norm"))