2010-07-21 140 views
24

我有一個小shell腳本(bash),它運行一個R腳本,它產生一個圖形作爲輸出。一切正常,但在情節呈現R退出後立即進行。有沒有辦法讓R會話保持活動直到繪圖窗口關閉。運行帶劇情的R腳本

shell腳本。

#!/bin/bash 
R --slave --vanilla < myscript.r 

和R腳本。

daq = read.table(file('mydata.dat')) 
X11() 
pairs(daq) 
//R Completes this and then exits immediately. 

在此先感謝您的幫助!

回答

26

如果使用RSCRIPT命令(這是更適合的了),你運行它是這樣的:

#!/usr/bin/Rscript 

daq = read.table(file('mydata.dat')) 
X11() 
pairs(daq) 

message("Press Return To Continue") 
invisible(readLines("stdin", n=1)) 

確保設置myscript.r執行權限,然後運行,如:

/path/to/myscript.r 

或不家當:

Rscript /path/to/myscript.r 
+3

這不好,因爲OP希望腳本在劇情結束後終止,而不是在按下某個按鍵之後終止。 – mbq 2010-07-21 21:00:50

+0

這很好,我只需要顯示器保持足夠長的時間,以便在shell腳本完成後可以查看這個圖。 – 2010-07-22 04:05:06

+3

這對我不起作用。從不出現圖形...(在窗口上) – 2016-09-12 23:58:18

3

這不是一個完美的解決方案,但您可以在plot命令之後調用locator()
或者將圖表保存爲pdf,然後使用system調用pdf查看器。

2

一個解決辦法是寫的情節出來pdf改爲:

pdf(file="myplot.pdf") 

##your plot command here 
plot(. . .) 

dev.off() 
0

更重要的問題是爲什麼你要R在圖創建後運行?在交互模式或批處理模式下使用它......我不明白你想完成什麼。此外,請嘗試littler,它位於Ubuntu回購(Universe回購,如果我是正確的)或Rscript,因此重寫您的腳本並將其命名爲myscript.r,並確保將正確的路徑放在第一行。嘗試whereis Rscript(通常是/ usr/bin/Rscript)。忘記bash腳本。你可以通過--vanilla和--slave參數RSCRIPT,但我看不到目的... O_O

10

你可以添加一個循環,檢查每n秒的圖形設備:

while (!is.null(dev.list())) Sys.sleep(1) 

這將一直睡到您關閉繪圖窗口。

+0

這樣好多了,甚至可以讓用戶調整窗口大小等等。 – csl 2017-05-22 20:37:39