将RScript生成的图留在屏幕上直到用户交互

时间:2011-11-17 13:13:42

标签: windows r rscript

我有一个R脚本查询数据库,运行一些分析,根据当前系统日期绘制几个图表。

我想让这个脚本每天在启动时运行,我想我可以通过使用rscript.exe的快捷方式,使用必要的参数来完成这项工作。

这样可以正常工作,但是脚本在运行后退出,对查看图表不是很有用。

我正在使用XP和win7。

是否有一种简单的方法可以将脚本的输出保留在屏幕上?我已经尝试将扫描结合到脚本中,但它不会暂停。

我知道我可以打开rgui并运行一行代码,但计划是将其部署到一个完全不熟悉R的同事的计算机上。

4 个答案:

答案 0 :(得分:9)

这适用于Linux:

#!/usr/bin/env Rscript

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

用户必须先单击绘图窗口才能消失。我认为它可以在Windows上调用windows()代替。

答案 1 :(得分:2)

迈克尔的解决方案可能已经有效了,但这里显示的是tkrplot框内的情节。 tkrplot包(在CRAN上)使用对R的tcltk扩展,并且随处可用。

# 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

如果您查看R的tcltk文档,可以找到其他关闭“Ok”按钮的示例等。

答案 2 :(得分:2)

Sys.sleep(1e30)怎么样?那应该等待足够长的时间。

答案 3 :(得分:1)

好吧,对于我在这类问题上看到的所有答案,我都会完全婊子,因为他们都没有在Windows上工作过。 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!