ユーザーがキーを押すまでRスクリプトを一時停止したい。
どうすればよいですか?
誰かがすでにコメントに書いているように、前に猫を使う必要はありませんreadline()
。簡単に書く:
readline(prompt="Press [enter] to continue")
それを変数に割り当てたくない場合、およびコンソールにリターンを出力したくない場合は、次のようにラップreadline()
しますinvisible()
。
invisible(readline(prompt="Press [enter] to continue"))
方法1
コンソールで[Enter]を押すまで待機します。
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のいずれかを使用する環境でテストされています。RevolutionRv6.1を搭載したWindows7x64で動作します。RStudioでは機能しません(win.graphを使用しないため)。
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