在R(软件包双并行)中使用%dopar%而不是%do%时出错
我犯了一个奇怪的错误。 假设我在一个名为data的列表中有10个xts对象。现在,我使用在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_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")