2013-12-15 15 views
14

Domanda relativa a RStudio. Supponiamo che io sono in esecuzione un codice nella console:rstudio - è possibile eseguire un codice in background

> code1() 

supporre che code1() stampe nulla sulla console, ma code1() porta sopra un'ora per completare. Voglio lavorare su qualcos'altro mentre aspetto code1(). È possibile? per esempio, c'è una funzione come runInBackground che posso usare come segue

> runInBackground(code1()) 
> code2() 

Le alternative sono in esecuzione due RStudios o la scrittura di un file batch che utilizza Rscript per eseguire code1(), ma volevo sapere se c'è qualcosa di più facile che Posso fare senza lasciare la console RStudio. Ho provato a sfogliare la documentazione della guida di R ma non ho trovato nulla (o forse non ho usato le parole chiave corrette).

+3

Questo non è possibile. R è single-threaded. Esegui invece due processi R separati. – Thomas

+0

Inoltre, non conflate RStudio con R. RStudio è semplicemente un IDE. RStudio lancia un'istanza di R stesso, che è ciò che sta effettivamente eseguendo il tuo codice. – joran

+0

Ciò significa che l'esecuzione di un file batch deve avere esito positivo. –

risposta

4

si può sempre fare questo, che non è ideale, ma funziona per la maggior parte degli scopi:

shell(cmd = 'Rscript.exe some_script.R', wait=FALSE) 
4

La funzione mcparallel() nel pacchetto parallel farà il trucco, se siete su Linux, che è. ..

library(parallel) Job1 = mcparallel(code1()) JobResult1 = mccollect(Job1)

3

il future package (sono l'autore) fornisce questa:

library("future") 
plan(multiprocess) 

future(code1()) 
code2() 

Cordiali saluti, se si utilizza

plan(cluster, workers = c("n1", "n3", "remote.server.org")) 

allora il futuro espressione è risolto in una di quelle macchine. L'utilizzo di

plan(future.BatchJobs::batchjobs_slurm) 

causerà la risoluzione tramite una coda di pianificazione lavoro di Slurm.

Questa domanda è strettamente correlata a Run asynchronous function in R

Problemi correlati