并行化data.table中的集合;与for循环一起工作;但对于每个%dopar%来说';Tforeach%do%有效

并行化data.table中的集合;与for循环一起工作;但对于每个%dopar%来说';Tforeach%do%有效,r,for-loop,foreach,data.table,doparallel,R,For Loop,Foreach,Data.table,Doparallel,我正在尝试将下面的代码并行化;它与foreach%do%配合使用效果非常好;但与%dopar%无关;有人能帮忙吗 我确实看了一些其他的帖子,尝试了一些东西,但似乎没有任何效果。我也试过帕拉普利 library(data.table) library(parallel) library(doParallel) library(foreach) ex_dat <- expand.grid(a1 = 10:100, a2 = 500:600) %>% data.table ex_dat[

我正在尝试将下面的代码并行化;它与foreach%do%配合使用效果非常好;但与%dopar%无关;有人能帮忙吗

我确实看了一些其他的帖子,尝试了一些东西,但似乎没有任何效果。我也试过帕拉普利

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)
库(data.table)
图书馆(平行)
图书馆(双平行)
图书馆(foreach)
ex_dat%数据表
ex_dat[,m:=列表(c(1L,2L))]
对于(i in 1:nrow(ex_dat))集合(ex_dat,i,3L,list(list)(平均值(c(ex_dat$a1[i],ex_dat$a2[i])),
sd(c(ex_-dat$a1[i]、ex_-dat$a2[i]()()))
拆分金额(百万美元)
ex_dat_1%数据表
ex_dat_1[,m:=列表(c(1L,2L))]

split_ex_dat您就快到了,但您实际要查找的是以下代码,它在每次并行运行后返回最终的组合值

dt <- 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]))))) 
return(dt) }

dt试试这个:
dt还有,你为什么要在代码中调用
split_ex_dat$m
三次?谢谢Vitali。很抱歉,{split_ex_dat$m}出现了一个错误。然而,我正在尝试使用这个和一个简单的for循环来运行glms,它的运行速度比{%dopar%}快得多。有没有更有效/更快的方法来运行它?我认为foreach应该有效?scen_bin当然,我刚刚提出了另一个问题;谢谢