我有一个小的shell脚本(bash),它运行一个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.
提前感谢您的帮助!
答案 0 :(得分:29)
如果您使用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
或没有shebang:
Rscript /path/to/myscript.r
答案 1 :(得分:13)
您可以添加一个每n秒检查一次图形设备的循环:
while (!is.null(dev.list())) Sys.sleep(1)
这将睡眠,直到您关闭绘图窗口。
答案 2 :(得分:3)
这不是一个完美的解决方案,但您可以在绘图命令之后立即调用locator()
或者只是将绘图保存为pdf,然后使用system
在其上调用pdf viewer。
答案 3 :(得分:2)
一种解决方案是将图形写成pdf而不是:
pdf(file="myplot.pdf")
##your plot command here
plot( . . . )
dev.off()
答案 4 :(得分:0)
更重要的问题是为什么你希望R在图形创建后运行?在交互模式或批处理模式下使用它...我不明白你想要完成什么。此外,尝试littler
,它位于Ubuntu repos(宇宙回购,如果我是正确的),或Rscript
,所以重写你的脚本并将其命名为myscript.r,并确保放置正确的路径在第一行。试试whereis Rscript
(通常是/ usr / bin / Rscript)。忘记bash脚本。你可以将-vanilla和--slave参数传递给Rscript,但我没有看到目的...... O_o