2015-11-27 38 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))