与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
。