답변:
누군가 이미 의견을 작성 했으므로 이전에 고양이를 사용할 필요는 없습니다 readline()
. 간단히 쓰십시오 :
readline(prompt="Press [enter] to continue")
당신이 변수에 할당하지 않고 콘솔에 인쇄 복귀를 원하지 않는 경우, 포장 readline()
의를 invisible()
:
invisible(readline(prompt="Press [enter] to continue"))
press esc keep to exit loop
?
방법 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이 사용됩니다 . Revolution R v6.1이 설치된 Windows 7 x64에서 작동합니다. RStudio에서는 작동하지 않습니다 (win.graph를 사용하지 않으므로).
prompt
인수를 사용하여 방법 1을 단축 할 수 있습니다 readline
. 방법 2는 what=""
에 대한 호출에 추가 된 경우 숫자뿐만 아니라 모든 입력에서 작동 합니다 scan
. getGraphicsEvent
특정 플랫폼의 특정 그래픽 장치에서만 작동합니다 (그러나 해당 장치 중 하나를 사용하는 경우 제대로 작동합니다).
if(line == "Q") stop()
작은 창을 열고 계속 버튼을 클릭하거나 아무 키나 누를 때까지 기다리는 작은 기능 (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를 지원하는 모든 플랫폼에서 작동합니다 (모든 공통적 인 것으로 생각합니다) (입력뿐만 아니라) 키 누르기에 응답하고 스크립트가 배치 모드에서 실행될 때도 작동하지만 배치 모드에서 여전히 일시 중지됩니다 따라서 계속하지 않으면 영원히 기다릴 것입니다). 클릭하지 않았거나 키를 눌렀을 경우 일정 시간이 지난 후에 타이머를 추가하여 계속 사용할 수 있습니다.
어떤 키를 눌렀는지는 반환하지 않지만 수정하려면 수정할 수 있습니다.
Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") : [tcl] invalid command name "toplevel".
)
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
이 답변은 Simon 의 답변과 비슷 하지만 줄 바꿈 이외의 추가 입력이 필요하지 않습니다.
cat("Press Enter to continue...")
invisible(scan("stdin", character(), nlines = 1, quiet = TRUE))
nlines=1
대신을 사용 n=1
하면 Enter 키를 눌러 Rscript를 계속할 수 있습니다.
Rscript
: 일시 정지되며 Enter
계속 하기 만하면 됩니다.
그것을하는 방법 (kinda, 키 대신 버튼을 눌러야하지만 충분히 가깝습니다)은 반짝이는 것을 사용하는 것입니다.
library(shiny)
ui <- fluidPage(actionButton("button", "Press the button"))
server <- function(input, output) {observeEvent(input$button, {stopApp()})}
runApp(shinyApp(ui = ui, server = server))
print("He waited for you to press the button in order to print this")
내 경험에 따르면 이것은 고유 한 특징이 있습니다. runApp
함수에 따라 작성된 코드가있는 스크립트를 실행하더라도 앱의 버튼 (을 사용하여 앱이 내부에서 중지되는 버튼)을 누를 때까지 실행되지 않습니다 stopApp
.