2015-06-30 35 views
7

In meiner Diplomarbeit muss ich eine Menge Simulationsstudien durchführen, was ziemlich lange dauert. Mein Computer hat 4 Kerne, also habe ich mich gefragt, ob es möglich ist, zum Beispiel zwei R-Skripte in Rstudio gleichzeitig zu benutzen, indem man sie zwei verschiedene Kerne benutzen lässt? Wenn dies möglich wäre, könnte ich eine Menge Zeit sparen, indem ich den Computer über Nacht lasse und alle diese Skripte laufen lasse.Mehrere R-Skripte gleichzeitig ausführen

+0

Ich denke, es gibt Antwort auf solche Frage [Link] (http://StackOverflow.com/Questions/10835122/Multithreading-with-r/10835234), oder dort [Link] (http://StackOverflow.com/ Fragen/18377870/running-jobs-in-background-in-r) – Batanichek

+1

Sie können mehrere R-Sitzungen einrichten und Ihre Skripts pro Sitzung ausführen. – Hav0k

Antwort

7

Unter der Annahme, dass die Ergebnisse müssen nicht in der gleichen Umgebung landen, können Sie erreichen dies RStudio Projekte mit: https://support.rstudio.com/hc/en-us/articles/200526207-Using-Projects

ersten zwei separate Projekte erstellen. Sie können beide gleichzeitig öffnen, was zu zwei Sitzungen führt. Sie können dann jedes Skript in jedem Projekt öffnen und jedes einzeln ausführen. Auf Ihrem Betriebssystem verwalten Sie dann die Kernzuweisung.

3

Sie Multi-Core-Parallelität erreichen können (wie hier https://cran.r-project.org/web/packages/doMC/vignettes/gettingstartedMC.pdf erklärt) in der gleichen Sitzung mit dem folgenden Code

if(Sys.info()["sysname"]=="Windows"){ 
    library(doParallel) 
    cl<-makeCluster(numberOfCores) 
    registerDoParallel(cl) 
}else{ 
    library(doMC) 
    registerDoMC(numberOfCores) 
} 
library(foreach) 

someList<-list("file1","file2") 
returnComputation <- 
    foreach(x=someList) %dopar%{ 
    source(x) 
    } 


if(Sys.info()["sysname"]=="Windows") stopCluster(cl) 

Sie Ihre Ausgabe müssen noch angepasst werden.

+0

Leider scheint dies auf Windows nicht unterstützt zu werden (gemäß den zitierten Dokumenten). – mrjoseph

4

Wenn Sie mit der rechten Maustaste auf RStudio klicken, sollten Sie mehrere separate "Sitzungen" von RStudio öffnen können (unabhängig davon, ob Sie Projekte verwenden). Standardmäßig werden diese jeweils 1 Kern verwendet. Wenn jedoch mehrere Skripte, die Sie ohne Fehler laufen wissen, würde ich empfehlen, diese auf verschiedene Parameter über die Befehlszeile ausgeführt wird:

RCMD script.R 
RScript script.R 

Laufen im Hintergrund:

nohup Rscript script.R & 

Here "& "führt das Skript im Hintergrund aus (es kann mit fg abgerufen werden, überwacht mit htop, und getötet mit kill <pid> oder pkill rsession) und nohup speichert die Ausgabe in einer Datei und läuft weiter, wenn das Terminal geschlossen ist.

Passing Argumente zu einem Skript:

Rscript script.R 1 2 3 

Diese c(1, 2, 3) bis R als Ausgang des commandArgs() so eine Schleife in bash passieren mehrere Instanzen von Rscript mit einem schlag Schleife laufen kann:

for ii in 1 2 3 
    do 
    nohup Rscript script.R $ii & 
    done 

Paralleler Code ausführen (innerhalb von R):

Sie werden oft feststellen, dass ein bestimmter Schritt in Ihrem R-Skript die Berechnungen verlangsamt, kann ich vorschlagen Parallelen Code in Ihrem R-Code ausführen, anstatt sie separat auszuführen? Ich würde die snow package für die Ausführung von Schleifen parallel in R. Im Allgemeinen statt Verwendung empfehlen:

cl <- makeCluster(n) 
# n = number of cores (I'd recommend one less than machine capacity) 
clusterExport(list=ls()) #export input data to all cores 
output_list <- parLapply(cl, input_list, function(x) ...) 
stopCluster() # close cluster when complete (particularly on shared machines) 

verwendet überall würden Sie normalerweise eine lapply Funktion in R verwenden sie parallel laufen zu lassen.

Verwandte Themen