2015-11-27 1 views
-1

J'ai une boucle qui effectue une itération de 2 à une valeur spécifiée (par exemple, columnCount). La valeur de i est cruciale car tout calcul effectué à l'intérieur de la boucle dépend de la valeur de i.Traitement parallèle dans R à l'aide du package 'doParallel'

boucle Snippet:

> 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) 
    } 

Note: la colonne Y est toujours constante, tandis que x colonnes itère de 1 à chaque étape (réelle trame de données a plus de 250 colonnes) .Comment dois-je traduire pour que je peut utiliser:

library(foreach) 
library(doParallel) 

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

Veuillez indiquer un représentant complet et [problème reproductible] (http://stackoverflow.com/a/5963610/1412059). Les '...' ne sont pas hors de propos. Très probablement, vous ne devriez pas utiliser une boucle du tout. – Roland

+0

Il y a plus de 100 lignes de code là-bas. La boucle classe une variable d'une trame de données à la fois à l'aide de smbinning. – user3243478

+0

C'est votre tâche de créer un exemple minimal et reproductible. Nous ne voulons pas une énorme quantité de code, mais quelque chose de petit qui démontre votre problème et peut être exécuté dans une session R. – Roland

Répondre

1

Que diriez-vous d'utiliser le mclapply du package parallèle. Quelque chose comme le ci-dessous par exemple:

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))