Я пытаюсь использовать R в рамках сценария, который будет действовать как простой графический инструмент командной строки. Т.е. пользователь передает по каналу в файле CSV, и они получают график. Я могу добраться до штрафа R и получить график отобразиться посредством различных временных махинаций файла, но я поразил контрольно-пропускной пункт. Я не могу выяснить, как заставить R продолжать бежать, пока пользователи не закрывают окно.
Если я вывожусь на печать и выхожу, график сразу исчезает. Если я вывожу на печать и использую некоторый бесконечный цикл, пользователь не может закрыть график; он должен выйти при помощи прерывания, которое я не люблю. Я вижу, что существует функция getGraphicsEvent, но она утверждает, что устройство не поддерживается (X11). Так или иначе это, кажется, на самом деле не поддерживает onClose событие, только onMouseDown.
Какие-либо идеи о том, как решить это?
править: Благодаря Кортику для совета проверить интерфейс tk. Вот мой тестовый код, который работает:
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) }
## create top level window
tt<-tktoplevel()
## variable to wait on like a condition variable, to be set by event handler
done <- tclVar(0)
## 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))
## wait until done is true
tkwait.variable(done)
Вам нужно что-то с отдельным циклом событий --- и лучшее переносимое решение - полагаться на (уже включенный) пакет tcltk
. Начнем с его демонстраций.
Самым простым случаем может быть
> library(tcltk)
> tk_messageBox(message="Press a key")
, когда появляется окно, которое необходимо подтвердить, чтобы продолжить.