Я пытаюсь распараллелить мой код ниже; он отлично работает с foreach% do%; но не с% допар%; Может кто-нибудь, пожалуйста, помогите.
Я просмотрел несколько других постов и попробовал несколько вещей, но, похоже, ничего не работает. Это также попытался parLapply.
library(data.table)
library(parallel)
library(doParallel)
library(foreach)
ex_dat <- expand.grid(a1 = 10:100, a2 = 500:600) %>% data.table
ex_dat[,m := list(c(1L,2L))]
for(i in 1:nrow(ex_dat)) set(ex_dat,i,3L,list(list(mean(c(ex_dat$a1[i],ex_dat$a2[i])),
sd(c(ex_dat$a1[i],ex_dat$a2[i])))))
split_ex_dat$m
ex_dat_1 <- expand.grid(a1 = 10:100, a2 = 500:600) %>% data.table
ex_dat_1[,m := list(c(1L,2L))]
split_ex_dat <- split(ex_dat_1, seq(1,nrow(ex_dat_1), length.out = 10))
foreach(x = 1:10, .packages = c("data.table")) %do%
{
dt <- split_ex_dat[[x]]
for(i in 1:919) set(dt,i,3L,list(list(mean(c(dt$a1[i],dt$a2[i])),
sd(c(dt$a1[i],dt$a2[i])))))
}
split_ex_dat$m
cl <- 30
clu <- makeCluster(cl)
registerDoParallel(clu)
ex_dat_1 <- expand.grid(a1 = 10:100, a2 = 500:600) %>% data.table
ex_dat_1[,m := list(c(1L,2L))]
split_ex_dat <- split(ex_dat_1, seq(1,nrow(ex_dat_1), length.out = 10))
foreach(x = 1:10, .packages = c("data.table")) %dopar%
{
dt <- split_ex_dat[[x]]
for(i in 1:919) set(dt,i,3L,list(list(mean(c(dt$a1[i],dt$a2[i])),
sd(c(dt$a1[i],dt$a2[i])))))
}
split_ex_dat$m
stopCluster(clu)