我想在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'
答案 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
的返回对象。