在R(软件包双并行)中使用%dopar%而不是%do%时出错

在R(软件包双并行)中使用%dopar%而不是%do%时出错,r,foreach,parallel-processing,xts,R,Foreach,Parallel Processing,Xts,我犯了一个奇怪的错误。 假设我在一个名为data的列表中有10个xts对象。现在,我使用 data_names <- names(data) combs <- combn(data_names, 3) data\u name问题可能是您没有对每个worker调用library(xts)。你没有说你在用什么后端,所以我不能100%肯定 如果这是问题所在,则此代码将修复它: list <- foreach(i=1:ncol(combs)) %dopar% {

我犯了一个奇怪的错误。 假设我在一个名为data的列表中有10个xts对象。现在,我使用

   data_names <- names(data)
   combs <- combn(data_names, 3)

data\u name问题可能是您没有对每个worker调用
library(xts)
。你没有说你在用什么后端,所以我不能100%肯定

如果这是问题所在,则此代码将修复它:

list <- foreach(i=1:ncol(combs)) %dopar% {
    library(xts)
    tmp_triple <- combs[,i]

    p1<-data[tmp_triple[[1]]][[1]]
    p2<-data[tmp_triple[[2]]][[1]]
    p3<-data[tmp_triple[[3]]][[1]]

    data.merge <- merge(p1,p2,p3,all=FALSE)
}

list使用foreach()函数的.packages参数比在函数中显式加载库更好:

list <- foreach(i=1:ncol(combs),.packages=c("xts","zoo")) %dopar% {
    tmp_triple <- combs[,i]

    p1<-data[tmp_triple[[1]]][[1]]
    p2<-data[tmp_triple[[2]]][[1]]
    p3<-data[tmp_triple[[3]]][[1]]

    data.merge <- merge(p1,p2,p3,all=FALSE)
}

listforeach%dopar%问题的快速修复方法是重新安装这些软件包:

install.packages("doSNOW")

install.packages("doParallel") 

install.packages("doMPI")

它们负责R中的并行性。这些包的旧版本中存在的Bug现在被删除。这在我的情况下起了作用。

就是这样!我没有意识到我需要调用lib,但是它非常有意义,因为它启动了不同的会话……谢谢!谢谢你的建议!让一切都干净一点!
install.packages("doSNOW")

install.packages("doParallel") 

install.packages("doMPI")