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

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

我的基本目标是在这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)
}

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

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

但是,将%dopar%更改为常规串行%do%时,一切正常。

到现在为止,我仍无法找到解决该问题的任何方法,甚至不确定要寻找什么。

最佳答案

一个更好的解决方案是使用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)
}

关于r - 在R中使用%dopar%代替%do%时出错(软件包doParallel),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17157211/

10-09 08:55