2011-11-17 65 views
7

我有一個R腳本查詢數據庫,運行一些分析,並根據當前系統日期繪製幾張圖表。在屏幕上留下RScript生成的圖表直到用戶交互

我想讓這個腳本每天在啓動時運行,我想我可以很簡單地使用帶有必要參數的rscript.exe快捷方式來執行此操作。

這很好,但腳本運行後退出,對於查看圖表不是很有用。

我正在使用XP和win7。

有沒有一種簡單的方法來保持屏幕上的腳本輸出?我試過將掃描結合到腳本中,但它不會暫停。

我知道我可以只打開RGUI,並運行一個單一的代碼行,但計劃是這一部署到誰與R.

+0

可能輸出到一個圖形文件(如PNG),並彈出的是在屏幕上用合適的瀏覽器? –

+1

將此與Latex結合起來(可能使用Sweave,也可能沒有我想象)可以讓您生成帶有報告的pdf。 –

+0

我很不熟悉乳膠(雖然看起來不錯),而且圖像瀏覽者並沒有像一種非常穩健的方式讓它起作用(即有人安裝了一些相機軟件並且一切都打破了) 我想知道是否有一批文件可以幫助,只是嘗試,但rscript仍然退出退出並關閉圖形窗口。 感謝您的想法。 – BetaScoo8

回答

9

這對我的作品在Linux上人生地不熟的一個同事的電腦:

#!/usr/bin/env Rscript 

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

用戶必須在消失之前單擊繪圖窗口。我認爲它可以在Windows上使用windows()來代替。

+0

該腳本實際上會調用windows()4次,但是當腳本不幸退出時它們全部關閉。我嘗試使用locator(),但是我的點擊速度不夠快,或者它不起作用。 – BetaScoo8

+0

它應該保持劇情窗口_until_用戶點擊。對不起,它不適合你。 –

+0

好的,也可以是我實現它的方式。謝謝 – BetaScoo8

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文檔,找到「確定」按鈕,其他的例子,關閉等

2

如何Sys.sleep(1e30)?這應該等待足夠長的時間。

+0

哈,這是一個不錯的快速和骯髒的解決方案。優秀。 – BetaScoo8

+0

用戶將不得不關閉窗口或點擊轉義或ctrl-something來擺脫它。 – Spacedman

+0

使它在Windows中工作只是使用Sys.sleep(10000),的確,1e30沒有任何作用(Windows 8 64位) – pommedeterresautee

1

好吧,對於這類問題我所看到的所有答案都完全蠢蠢欲動,因爲他們都沒有在Windows上工作過。 readline,tkwait.window,Sys.sleep(1e30),while(TRUE),沒有任何工作。

但是我剛剛將R更新爲v3.1.0,現在tkwait.window(yourmainwindow)有效,while(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!