2011-11-17 6 views
7

Tengo un script R que consulta una base de datos, ejecuta algunos análisis, traza algunos gráficos basados ​​en la fecha actual del sistema.Salir de tramas producidas por RScript en la pantalla hasta interacción del usuario

Quiero que este script se ejecute todos los días en el arranque, pensé que podría hacer esto simplemente usando un acceso directo a rscript.exe con los parámetros necesarios.

Esto funciona bien, sin embargo, el script se cierra después de ejecutarse, no es muy útil para ver los gráficos.

Estoy usando XP y win7.

¿Hay alguna manera fácil de mantener el resultado del script en la pantalla? Intenté incorporar escaneo en el guión, pero no pausa.

sé que sólo podía abrir la Rgui, y ejecutar una sola línea de código, pero el plan es implementar esta al ordenador de un colega que es totalmente desconocido con R.

+0

Tal vez la salida a un archivo de gráficos (por ejemplo, PNG) y el pop que en la pantalla con un visor apropiado? –

+1

Combinando esto con Latex (tal vez usando Sweave, también posible sin que lo crea) le permitiría generar un pdf con un informe. –

+0

Desgraciadamente no estoy familiarizado con el látex (aunque lo voy a ver), y los lectores de imágenes no se asemejan a una forma muy sólida de hacer que esto funcione (es decir, alguien instala software de cámara y todo se rompe) Me pregunto si un lote el archivo podría ayudar, solo intenté pero el rscript aún se cierra al salir y cerró las ventanas de gráficos. Gracias por las ideas. – BetaScoo8

Respuesta

9

Esto funciona para mí en Linux:

#!/usr/bin/env Rscript 

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

El usuario debe hacer clic en la ventana de trazado antes de que desaparezca. Supongo que funcionaría en Windows con una llamada al windows().

+0

La secuencia de comandos realmente llama a windows() 4 veces, pero están todas cerradas cuando desaparece la secuencia de comandos. Intenté usar locator() pero o no soy lo suficientemente rápido con mis clics, o no funciona. – BetaScoo8

+0

Se supone que mantiene la ventana de trazado arriba _toda_ el usuario hace clic. Lo siento, no funciona para ti. –

+0

Ah bien, podría ser la forma en que lo he implementado también. Gracias – BetaScoo8

2

La solución de Michael ya puede funcionar, pero aquí está el algo que muestra una trama dentro de un marco tkrplot. El paquete tkrplot (en CRAN) usa las extensiones tcltk para R y está disponible en todas partes.

# 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 

Si se mira a través de la documentación tcltk para R, a encontrar otros ejemplos con los botones 'OK' para cerrar etc.

2

¿Qué tal Sys.sleep (1e30)? Eso debería esperar el tiempo suficiente.

+0

ja, esa es una buena solución rápida y sucia. excelente. – BetaScoo8

+0

usuario tendrá que cerrar la ventana o pulsar escape o ctrl-something para deshacerse de él sin embargo. – Spacedman

+0

para que funcione en Windows solo use Sys.sleep (10000), de hecho, 1e30 no tiene efecto (Windows 8 64 bits) – pommedeterresautee

1

OK, estaba totalmente perpleja por todas las respuestas que he visto a este tipo de preguntas porque ninguna de ellas funcionaba en Windows. readline, tkwait.window, Sys.sleep (1e30), mientras que (TRUE), nada funcionó.

Pero acabo de actualizar R a v3.1.0 y ahora tkwait.window (yourmainwindow) funciona, mientras que (TRUE) {} funciona, aunque Sys.sleep (1e30) todavía no funciona.

No importa ... Estoy usando tkwait.window, porque es tk, y está esperando mi ventana (que es lo que quiero).

Obteniendo el p. Ej. http://www.sciviews.org/_rgui/tcltk/OKtoplevel.html de trabajar ... (eliminadas por razones de brevedad comentarios)

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! 
Cuestiones relacionadas