我想,直到用户按下一个键暂停我的[R脚本。
我该怎么做呢?
我想,直到用户按下一个键暂停我的[R脚本。
我该怎么做呢?
正如有人评论已经写,你不必之前,使用猫readline()
简单地写:
readline(prompt="Press [enter] to continue")
如果你不想把它分配给一个变量,不希望打印到控制台上一回,包裹readline()
在invisible()
invisible(readline(prompt="Press [enter] to continue"))
方法1
等待,直到你按下控制台[进入]:
cat ("Press [enter] to continue")
line <- readline()
包装成一个函数:
readkey <- function()
{
cat ("Press [enter] to continue")
line <- readline()
}
此功能是最好相当于Console.ReadKey()
在C#。
方法2
暂停,直到您键入键盘上的[Enter]键击。 这种方法的缺点是,如果你输入的东西是不是一个数字,它会显示一个错误。
print ("Press [enter] to continue")
number <- scan(n=1)
包装成一个函数:
readkey <- function()
{
cat("[press [enter] to continue]")
number <- scan(n=1)
}
方法3
假如你想在图形上绘制另一点之前等待一个按键。 在这种情况下,我们可以使用getGraphicsEvent()等待图表内的按键。
此示例程序说明了这一概念:
readkeygraph <- function(prompt)
{
getGraphicsEvent(prompt = prompt,
onMouseDown = NULL, onMouseMove = NULL,
onMouseUp = NULL, onKeybd = onKeybd,
consolePrompt = "[click on graph then follow top prompt to continue]")
Sys.sleep(0.01)
return(keyPressed)
}
onKeybd <- function(key)
{
keyPressed <<- key
}
xaxis=c(1:10) # Set up the x-axis.
yaxis=runif(10,min=0,max=1) # Set up the y-axis.
plot(xaxis,yaxis)
for (i in xaxis)
{
# On each keypress, color the points on the graph in red, one by one.
points(i,yaxis[i],col="red", pch=19)
keyPressed = readkeygraph("[press any key to continue]")
}
在这里,您可以看到图中,其点颜色的一半,等待键盘上的一个按键。
兼容性:在环境测试请使用win.graph或X11 。 适用于Windows 7 64位与转速R V6.1。 RStudio下不工作(因为它不使用win.graph)。
这里是一个小功能(使用tcltk包),将打开一个小窗口,等待,直到您点击继续按钮或按任意键(而小窗口仍具有焦点),然后它会让你的脚本继续。
library(tcltk)
mywait <- function() {
tt <- tktoplevel()
tkpack( tkbutton(tt, text='Continue', command=function()tkdestroy(tt)),
side='bottom')
tkbind(tt,'<Key>', function()tkdestroy(tt) )
tkwait.window(tt)
}
只要把mywait()
脚本中任何你想要的脚本暂停。
这工作支持tcltk(我认为这是所有常见的),在任何平台上,将任何按键(不只是进入)响应,即使脚本在批处理模式下运行工作(但它仍然在批处理模式下暂停,所以如果你是不是有继续它,它会永远等待)。 可以添加一个计时器,使其继续在设定的时间量之后,如果不点击或有任何按键。
它不返回哪个键被按下(但可以修改这样做)。
R和RSCRIPT同时发送''
的ReadLine和非交互模式(见扫描? readline
)。 解决的办法是强制stdin
使用扫描。
cat('Solution to everything? > ')
b <- scan("stdin", character(), n=1)
例:
$ Rscript t.R
Solution to everything? > 42
Read 1 item
这个答案是相似的西蒙的,但并不需要比一个换行符以外的额外投入。
cat("Press Enter to continue...")
invisible(scan("stdin", character(), nlines = 1, quiet = TRUE))
使用nlines=1
而不是n=1
时,用户只需按下Enter继续RSCRIPT。