使用图运行R脚本

时间:2010-07-21 16:43:12

标签: bash r shell

我有一个小的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.

提前感谢您的帮助!

5 个答案:

答案 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