Make R (statistics package) wait for keyboard prompt when run within a bash script

混江龙づ霸主 提交于 2019-12-03 12:47:13

Use this:

readLines("stdin", n = 1)

That will get the real stdin instead of what stdin() uses.

I'd invoke it with:

Rscript myfile.r

It's a late answer but my goal was similar: Rscript execution should bring up an rgl window with a plot and nothing else, and it should remain there till the window is closed, i.e. the rgl window should not terminate.

To achieve this, I simply placed this at the end of the R script, and the rgl plot will remain there for manipulation until you quit the window, consuming little CPU time:

play3d(function(time) {Sys.sleep(0.01); list()} )

For regular 2D R plots, locator() works similarly, or locator(1) if one click should close the plot window.

I'm not sure if there is an easy way to wait a keyboard input, but at least you can wait mouse click.
Not elegant but try this script:

quartz() # or maybe windows() in windows
for (i in 1:5) {plot(i, i); locator(1)}

Here is an example script that works for me (tested your first calling method on windows). It uses the tcltk package and creates an extra, small window with a single button, the script will pause (but still allow you to interact with the rgl window) until you either click on the 'continue' button on press a key while that window is active, then continue with the script.

library(tcltk)
library(rgl)

mywait <- function() {
    tt <- tktoplevel()
    tkpack( tkbutton(tt, text='Continue', command=function()tkdestroy(tt)),
        side='bottom')
    tkbind(tt,'<Key>', function()tkdestroy(tt) )

    tkwait.window(tt)
}


x <- rnorm(10)
y <- rnorm(10)
z <- rnorm(10)

plot3d(x,y,z)

mywait()

x <- rnorm(100)
y <- rnorm(100)
z <- rnorm(100)

plot3d(x,y,z)

mywait()

cor(x,y)

plot.lm uses devAskNewPage(TRUE); perhaps that would also work here.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!