R - 并行化多模型学习(使用dplyr和purrr)

Bar*_*Bar 15 parallel-processing r dplyr purrr

这是关于学习多个模型的先前问题的后续跟进.

用例是我对每个主题都有多个观察结果,我想为每个主题训练一个模型.请参阅哈德利关于如何做到这一点的精彩演讲.

简而言之,这可以使用dplyrpurrr喜欢这样:

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)

  • multidplyr尚未开发两年(截至2018年8月),因此类似furrr的东西可能会更好。 (2认同)

Axe*_*man 9

furrr现在有包,例如:

library(dplyr)
library(furrr)
plan(multiprocess)

dt %>% 
    split(dt$subject_id) %>%
    future_map(~fitdist(.$observation, "norm"))
Run Code Online (Sandbox Code Playgroud)