2015-11-27 39 views
-1

我有一个从2迭代到指定值(即columnCount)的循环。 i的值是至关重要的,因为在循环内发生的所有计算都依赖于i的值。使用'doParallel'包进行R中的并行处理

环片段:

> x1=runif(900000,9999,90999) 
    > x2=runif(900000,0,9) 
    > x3=runif(900000,5000,80000) 
    > y=rep(0:1,450000) 
    > data=data.frame(y,x1,x2,x3) 
    > dim(data) 
    [1] 900000 4 
    > columnCount = ncol(data) 
    > yVar = names(data[1]) 

for (i in 2:columnCount) { 
    xVar[i] = names(data[i]) 
    result <- smbinning(df=data,y=yVar,x=xVar[i],p=0.05) 
    } 

注:Y列总是恒定的,而x列迭代1在每一步骤(实际数据帧具有250+列)。如何做我翻译这使我可以使用:

library(foreach) 
library(doParallel) 

foreach(icount(iters)) %dopar% { 
+1

请注明一个完整的代表和[reproducible problem](http://stackoverflow.com/a/5963610/1412059)。 “......”并不是无关紧要的。很可能你不应该使用循环。 – Roland

+0

那里有超过100行的代码。循环在一次使用调制时将数据帧的一个变量分组。 – user3243478

+0

这是你的任务,创造一个最小的和可重复的例子。我们不需要大量的代码,但是一些小的代码可以显示您的问题,并且可以在R会话中运行。 – Roland

回答

1

如何使用并行包中的mclapply。例如下面的例子:

require(smbinning) # caveat: I never used this package 
data(iris) 

names(iris) <- gsub("\\.","",names(iris)) # didn't like dots 
mclapply(2:NCOL(iris), function(varb) 
smbinning(df = iris[,c(1,varb)], 
      y = names(iris[,c(1,varb)])[1], 
      x = names(iris[,c(1,varb)])[2], 
      p = 0.05))