Оставлять производимые RScript графики на экране до взаимодействия с пользователем - PullRequest
7 голосов
/ 17 ноября 2011

У меня есть R-скрипт, который запрашивает базу данных, запускает некоторый анализ, строит несколько диаграмм на основе текущей системной даты.

Я хочу, чтобы этот скрипт запускался ежедневно при загрузке, я думал, чтоэто можно сделать довольно просто, используя ярлык для rscript.exe с необходимыми параметрами.

Это работает нормально, однако скрипт завершает работу после запуска, не очень полезно для просмотра диаграмм.

Iиспользую XP и win7.

Есть ли простой способ сохранить вывод скрипта на экране?Я попытался включить сканирование в сценарий, но оно не останавливается.

Я знаю, что могу просто открыть rgui и запустить одну строку кода, но планируется развернуть это для коллеги.компьютер, который совершенно незнаком с R.

Ответы [ 4 ]

9 голосов
/ 17 ноября 2011

Это работает для меня в Linux:

#!/usr/bin/env Rscript

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

Пользователь должен щелкнуть окно графика, прежде чем оно исчезнет. Я предполагаю, что он будет работать в Windows с вызовом windows().

2 голосов
/ 17 ноября 2011

Как насчет Sys.sleep (1e30)? Это должно подождать достаточно долго.

2 голосов
/ 17 ноября 2011

Решение Майкла уже может работать, но здесь есть кое-что, показывающее график внутри tkrplot кадра.Пакет tkrplot (в CRAN) использует расширения tcltk для R и доступен везде.

# From /3430842/r-sozdanie-prostogo-instrumenta-postroeniya-grafikov-komandnoi-stroki-zahvat-sobytii-zakrytiya-okna
#     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

Если вы посмотрите документацию по tcltk для R, вы найдете другие примеры с помощью 'Okкнопки для закрытия и т. д.

1 голос
/ 23 мая 2014

Ладно, я собираюсь полностью ссориться со всеми ответами, которые я видел на такого рода вопросы, потому что ни один из них не работал на окнах.readline, tkwait.window, Sys.sleep (1e30), в то время как (TRUE) ничего из этого не работает.

Но я только что обновил R до v3.1.0, и теперь tkwait.window (yourmainwindow) работает, пока (TRUE) {} работает, хотя Sys.sleep (1e30) все еще не работает.

Не берите в голову ... Я использую tkwait.window, потому что это tk, и ждет моего окна (что я и хочу).

Получение например от http://www.sciviews.org/_rgui/tcltk/OKtoplevel.html на работу ... (комментарии для краткости удалены)

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!
...