Bar*_*Bar 15 parallel-processing r dplyr purrr
这是关于学习多个模型的先前问题的后续跟进.
用例是我对每个主题都有多个观察结果,我想为每个主题训练一个模型.请参阅哈德利关于如何做到这一点的精彩演讲.
简而言之,这可以使用dplyr和purrr喜欢这样:
library(purrr)
library(dplyr)
library(fitdistrplus)
dt %>%
split(dt$subject_id) %>%
map( ~ fitdist(.$observation, "norm"))
Run Code Online (Sandbox Code Playgroud)
如此以来,建立模型是一个尴尬的并行任务,我在想,如果dplyr,purrr有一个易于使用的此类任务并行机制(如平行map).
如果这些库不提供易于并行化可以把它采用了经典的[R并行库(做parallel,foreach等)?
Bar*_*Bar 13
只需在这里添加一个完整性的答案,你需要从Hadley的repo 安装multidplyr来运行这个,在插图中有更多信息:
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)
Run Code Online (Sandbox Code Playgroud)
furrr现在有包,例如:
library(dplyr)
library(furrr)
plan(multiprocess)
dt %>%
split(dt$subject_id) %>%
future_map(~fitdist(.$observation, "norm"))
Run Code Online (Sandbox Code Playgroud)