2010-07-21 21 views
24

Ho un piccolo script di shell (bash) che esegue uno script R che produce un grafico come output. Tutto funziona bene ma immedietly dopo che la trama è stata resa R si arresta. C'è un modo per mantenere viva la sessione R fino alla chiusura della finestra del grafico.Esecuzione di script R con grafici

Lo script di shell.

#!/bin/bash 
R --slave --vanilla < myscript.r 

E lo script R.

daq = read.table(file('mydata.dat')) 
X11() 
pairs(daq) 
//R Completes this and then exits immediately. 

Grazie in anticipo per qualsiasi aiuto!

risposta

26

Se si utilizza il comando rscript (che è più adatto per questo scopo), si esegue in questo modo:

#!/usr/bin/Rscript 

daq = read.table(file('mydata.dat')) 
X11() 
pairs(daq) 

message("Press Return To Continue") 
invisible(readLines("stdin", n=1)) 

Assicurarsi di impostare il permesso di esecuzione su myscript.r, poi correre come:

/path/to/myscript.r 

o senza la faccenda:

Rscript /path/to/myscript.r 
+3

Questo non va bene, poiché OP voleva che lo script terminasse dopo che la trama è stata chiusa, non dopo aver premuto un tasto. – mbq

+0

Funziona abbastanza bene, ho solo bisogno che il display rimanga aperto abbastanza a lungo in modo che la trama possa essere visualizzata dopo il completamento dello script della shell. –

+3

Questo non funziona per me. Un grafico non appare mai ... (su Windows) –

3

Questa non è una soluzione perfetta, ma è possibile chiamare locator() subito dopo il comando di stampa.
Oppure basta salvare il grafico in pdf e quindi richiamare il visualizzatore pdf su di esso utilizzando system.

2

una soluzione sarebbe quella di scrivere la trama fuori per pdf invece:

pdf(file="myplot.pdf") 

##your plot command here 
plot(. . .) 

dev.off() 
0

La domanda più importante è perché vuoi che R esegua la creazione del grafico? Usalo in modalità interattiva o in modalità batch ... Non capisco cosa vuoi realizzare. Inoltre, prova littler, si trova nei repository di Ubuntu (repository universe, se sono corretto), o Rscript, quindi riscrivi il tuo script e chiamalo myscript.r, e assicurati di inserire il percorso corretto nella prima riga. Prova whereis Rscript (di solito/usr/bin/Rscript). Dimentica lo script di bash. È possibile passare --vanilla e --slave argomenti per rscript, ma non vedo lo scopo ... O_o

10

Si potrebbe aggiungere un ciclo che controlla il dispositivo di grafica ogni n secondi:

while (!is.null(dev.list())) Sys.sleep(1) 

Questo si addormenta finché non si chiude la finestra del grafico.

+0

Questo è molto meglio, finisce anche consente all'utente di ridimensionare la finestra e così via. – csl