我有一个R脚本查询数据库,运行一些分析,根据当前系统日期绘制几个图表。
我想让这个脚本每天在启动时运行,我想我可以通过使用rscript.exe的快捷方式,使用必要的参数来完成这项工作。
这样可以正常工作,但是脚本在运行后退出,对查看图表不是很有用。
我正在使用XP和win7。
是否有一种简单的方法可以将脚本的输出保留在屏幕上?我已经尝试将扫描结合到脚本中,但它不会暂停。
我知道我可以打开rgui并运行一行代码,但计划是将其部署到一个完全不熟悉R的同事的计算机上。
答案 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)
但是我刚刚将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!