与Linux中的Foreach和doMC包并行 - 与mclapply出错

时间:2014-02-23 09:47:20

标签: linux r foreach parallels

我想在Linux中运行并行计算。 在我设法在Windows中完成后,我需要在Linux中运行下面的功能。我将包doSnow更改为doMC,假设在Linux中工作,但我收到与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'

1 个答案:

答案 0 :(得分:2)

阅读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的返回对象。