R中使用%dopar%而不是%do%时出错(包doParallel)

use*_*695 4 parallel-processing foreach r xts

我想出了一个奇怪的错误.假设我在名为data的列表中有10个xts对象.我现在使用搜索每三个组合

   data_names <- names(data)
   combs <- combn(data_names, 3)
Run Code Online (Sandbox Code Playgroud)

我的基本目标是在这些1080三元组上进行PCA.为了加快速度,我想使用doParallel包.所以这里是缩短的片段,直到发生错误:

list <- foreach(i=1:ncol(combs)) %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)
}
Run Code Online (Sandbox Code Playgroud)

这里,合并功能似乎是问题所在.错误是

任务1失败 - "无法将类c("xts","zoo")强制转换为data.frame"

但是,当将%dopar%更改为正常序列%do%时,一切都可以接受.

直到现在我无法找到任何解决这个问题的方法,我甚至不确定要寻找什么.

Ada*_*son 10

更好的解决方案而不是在函数中显式加载库将是利用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)
}
Run Code Online (Sandbox Code Playgroud)