2016-04-24 8 views
0

Ich habe einen Datenrahmen (Df), der numerische Variablen hat. Ich möchte eine Regressionsanalyse unter Verwendung aller Kombinationen von Spalten machen (abhängige vs. unabhängige Variable spielt für mich keine Rolle).Anwenden von foreach-Bibliothek auf eine Multi-Regressionsanalyse in R

Also schrieb ich unter Code, der gut arbeitet:

#gtools required for combinations function 
library(gtools) 
#generate data-3 columns 30 rows data frame 
df<-as.data.frame(replicate(3, rnorm(30))) 
#extract two combination of columns 
comb<-combinations(n=ncol(df),2,colnames(df)) 

listc<-list() 
for(i in 1:nrow(comb)) 
    { 
    vars<-df[comb[i,]] 
    model.lm<-lm(vars[,1]~vars[,2],data=df) 
    listc[[i]]<-coefficients(model.lm) 
} 

ich schneller diesen Code ausgeführt werden soll. Ich versuche foreach Bibliothek, um parallele Verarbeitung zu ermöglichen. Jedoch kann ich nicht die oben genannte Anwendung anwenden?

Wie kann ich foreach auf diesen Code anwenden? Ich werde mich sehr für jede Hilfe freuen. Danke vielmals.

+0

Diese Beiträge könnten nützlich sein: http://stackoverflow.com/q/29803993/1989480 und http://stackoverflow.com/questions/36571864/why-the-built-in-lm-function-is-so -slow-in-r – chinsoon12

Antwort

1
#Load required libraries 
library(parallel) 
library(foreach) 
library(doParallel) 

#Register parallel cluster with all cores available minus 1 
cl <- makeCluster(detectCores() - 1) 
registerDoParallel(cl, cores = detectCores() - 1) 

#Extract two combination of columns 
comb <- combinations(n=ncol(df),2,colnames(df)) 

listc <- foreach (i=1:nrow(comb), .packages="gtools", .combine='c') %dopar% { 

      #Do stuff 
      vars <- df[comb[i,]] 
      model.lm <- lm(vars[,1]~vars[,2],data=df) 

      #Get coeeficients 
      coef_i <- list(coefficients(model.lm)) 
      coef_i 

      } 
stopCluster(cl) 

Die zurück listc eine Liste mit den Koeffizienten aus jeder Iteration/Reihen in df ist.

Verwandte Themen