与Linux中的Foreach和doMC软件包并行 - 与mclapply错误

问题描述:

我想在Linux中运行并行计算。 当我在Windows中成功完成后,我需要在Linux中运行下面的函数。我改变了软件包doSnow来做假设在Linux下工作的MC,但是我得到了与mclapply相关的错误。与Linux中的Foreach和doMC软件包并行 - 与mclapply错误

代码:

foreachFunc = function(Data) { 

    RowFunction<-function(d) 
    { 
    (chisq.test(d)$p.value)} 

    P<-as.matrix(apply(Data,1,RowFunction)) 

    return(P)} 

library(doMC) 
library(foreach) 

number_of_cpus=4 
cl<-makeCluster(number_of_cpus) 
registerDoMC(cl) 


Chunks<-c(1:NROW(Data_new))%%4 

P<-foreach(i=0:3, .combine=rbind, mc.cores=4) %dopar% { 
    foreachFunc(Data_new[Chunks==i, ])} 
stopCluster(cl) 

错误:

Error in mclapply(argsList, FUN, mc.preschedule = preschedule, mc.set.seed = set.seed, : 
    (list) object cannot be coerced to type 'integer' 

vignette("gettingstartedMC")。我可以重现你的错误是这样的:

number_of_cpus=4 
cl<-makeCluster(number_of_cpus) 
registerDoMC(cl) 
P<-foreach(i=0:3) %dopar% i 
#Error in mclapply(argsList, FUN, mc.preschedule = preschedule, mc.set.seed = set.seed, : 
# (list) object cannot be coerced to type 'integer' 
stopCluster(cl) 

这按预期工作:

registerDoMC(cores=4) 
P<-foreach(i=0:3) %dopar% i 

说明:registerDoMC预计其第一个参数的整数值。你给它一个清单,即返回对象makeCluster