2011-11-17 7 views
7

Ho uno script R che interroga un database, esegue un'analisi, traccia alcuni grafici in base alla data corrente del sistema.Lasciare i grafici prodotti da RScript sullo schermo fino all'interazione dell'utente

Voglio che questo script venga eseguito quotidianamente all'avvio, pensavo di poterlo fare abbastanza semplicemente usando un collegamento a rscript.exe con i parametri necessari.

Questo funziona correttamente, tuttavia lo script si interrompe dopo l'esecuzione, non molto utile per la visualizzazione dei grafici.

Sto usando XP e win7.

C'è un modo semplice per mantenere l'output dallo script sullo schermo? Ho provato a incorporare la scansione nello script, ma non si ferma.

So che potrei basta aprire il rgui, ed eseguire una sola riga di codice, ma il piano è quello di distribuire questo al computer di un collega che è del tutto sconosciuto con R.

+0

Forse output in un file di grafica (ad esempio PNG) e pop, che sullo schermo di un visualizzatore appropriato? –

+1

Combinare questo con il lattice (magari usando Sweave, anche possibile senza pensare) ti permetterebbe di generare un pdf con un rapporto. –

+0

Sono sfortunatamente poco pratico con il latex (avrò uno sguardo però), e il visualizzatore di immagini non sembra un modo molto robusto per farlo funzionare (ad esempio qualcuno installa qualche software della fotocamera e tutto si rompe) Mi chiedo se un lotto il file potrebbe aiutare, ha appena provato, ma il file rscript si chiude ancora all'uscita e chiude le finestre del grafico. Grazie per le idee però. – BetaScoo8

risposta

9

Questo funziona per me su Linux:

#!/usr/bin/env Rscript 

X11() 
with(mtcars, plot(mpg, hp)) 
locator(1) 

L'utente deve fare clic sulla finestra del grafico prima che scompaia. Presumo che funzionerebbe su Windows con una chiamata a windows() invece.

+0

Lo script chiama effettivamente windows() 4 volte, ma sono tutti chiusi quando lo script termina sfortunatamente. Ho provato a usare locator() ma non sono abbastanza veloce con i miei clic, o non funziona. – BetaScoo8

+0

Si suppone di mantenere la finestra del grafico su _until_ clic dell'utente. Spiacente, non funziona per te. –

+0

Ah ok, potrebbe essere il modo in cui l'ho implementato anche io. Grazie – BetaScoo8

2

La soluzione di Michael potrebbe già funzionare, ma ecco qualcosa che mostra una trama all'interno di una cornice tkrplot. Il pacchetto tkrplot (su CRAN) utilizza le estensioni tcltk per R ed è disponibile ovunque.

# From http://stackoverflow.com/questions/3063165/ 
#  r-building-a-simple-command-line-plotting-tool- 
#  capturing-window-close-events 

require(tcltk) 
library(tkrplot) 

## function to display plot, called by tkrplot and embedded in a window 
plotIt <- function(){ plot(x=1:10, y=1:10) } 
tt <- tktoplevel()  ## create top level window event handler 
done <- tclVar(0)  ## variable to wait on  
## bind to the window destroy event, set done variable when destroyed 
tkbind(tt,"<Destroy>",function() tclvalue(done) <- 1) 
## Have tkrplot embed the plot window, then realize it with tkgrid 
tkgrid(tkrplot(tt,plotIt)) 
tkwait.variable(done) ## wait until done is true 
## script continues, or exits, ... once plot is closed 

Se si guarda attraverso la documentazione tcltk per R, a trovare altri esempi con pulsanti 'OK' per chiudere ecc

2

Come su Sys.sleep (1E30)? Questo dovrebbe aspettare abbastanza a lungo.

+0

hah, questa è una bella soluzione rapida e sporca. eccellente. – BetaScoo8

+0

l'utente dovrà chiudere la finestra o premere escape o ctrl-qualcosa per sbarazzarsi di esso però. – Spacedman

+0

per farlo funzionare in Windows basta usare Sys.sleep (10000), infatti, 1e30 non ha alcun effetto (Windows 8 a 64 bit) – pommedeterresautee

1

OK, stavo davvero puttanando su tutte le risposte che ho visto a questo tipo di domande perché nessuno di loro ha funzionato su Windows. readline, tkwait.window, Sys.sleep (1e30), while (TRUE), nessuno dei due ha funzionato.

Ma ho appena aggiornato R alla v3.1.0 e ora tkwait.window (yourmainwindow) funziona, mentre (TRUE) {} funziona, anche se Sys.sleep (1e30) continua a non funzionare.

Non importa ... Sto usando tkwait.window, perché è tk, ed è in attesa della mia finestra (che è quello che voglio).

Ottenere ad es. da http://www.sciviews.org/_rgui/tcltk/OKtoplevel.html al lavoro ... (commenti rimossi per brevità)

require(tcltk) 
tt <- tktoplevel() 
OK.but <- tkbutton(tt, text = "OK", command = function() tkdestroy(tt)) 
tkgrid(OK.but) 
tkfocus(tt) 
tkwait.window(tt) # <-- added this to make the window stay! 
Problemi correlati