Yanıtlar:
Birisinin zaten bir yorumda yazdığı gibi, kediyi daha önce kullanmanız gerekmez readline()
. Basitçe şunu yazın:
readline(prompt="Press [enter] to continue")
Eğer bir değişkene atamayı istemiyorum ve konsolda basılmış bir dönüş istemiyorsanız, sarın readline()
bir in invisible()
:
invisible(readline(prompt="Press [enter] to continue"))
press esc keep to exit loop
?
Yöntem 1
Konsolda [enter] tuşuna basana kadar bekler:
cat ("Press [enter] to continue")
line <- readline()
Bir işleve sarma:
readkey <- function()
{
cat ("Press [enter] to continue")
line <- readline()
}
Bu işlev Console.ReadKey()
C # ile en iyi eşdeğeridir .
Yöntem 2
Klavyede [enter] tuş vuruşunu yazana kadar duraklatın. Bu yöntemin dezavantajı, sayı olmayan bir şey yazarsanız, bir hata göstermesidir.
print ("Press [enter] to continue")
number <- scan(n=1)
Bir işleve sarma:
readkey <- function()
{
cat("[press [enter] to continue]")
number <- scan(n=1)
}
Yöntem 3
Bir grafik üzerinde başka bir nokta çizmeden önce bir tuşa basmayı beklemek istediğinizi düşünün. Bu durumda, grafik içinde bir tuşa basmayı beklemek için getGraphicsEvent () öğesini kullanabiliriz.
Bu örnek program kavramı göstermektedir:
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]")
}
Burada, klavyede bir sonraki tuş vuruşu için bekleyen, noktalarının yarısı renkli olan grafiği görebilirsiniz.
Uyumluluk: Ortamlar altında test edilmiş win.graph veya X11 kullanın . Revolution R v6.1 ile Windows 7 x64 ile çalışır. RStudio altında çalışmaz (win.graph kullanmaz).
prompt
argümanı kullanılarak kısaltılabilir readline
. Yöntem 2 what=""
, çağrıya eklenirse herhangi bir girdiyle (yalnızca sayılarla) çalışır scan
. getGraphicsEvent
yalnızca belirli platformlardaki belirli grafik cihazlarında çalışır (ancak bu cihazlardan birini kullanıyorsanız iyi çalışır).
if(line == "Q") stop()
Küçük bir pencere açacak ve devam düğmesine tıklayana veya herhangi bir tuşa (küçük pencerenin hala odağı varken) basana kadar bekleyecek küçük bir işlev (tcltk paketini kullanarak), komut dosyanızın devam etmesine izin verecektir.
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()
Komut dosyanızı duraklatmak istediğiniz yere koymanız yeterlidir.
Bu, tcltk'yi destekleyen (tüm ortak olanlar olduğunu düşünüyorum) herhangi bir platformda çalışır, herhangi bir tuşa basmaya (yalnızca girmek değil) yanıt verir ve hatta komut dosyası toplu modda çalıştırıldığında bile çalışır (ancak toplu modda hala duraklar , devam etmek için orada değilseniz sonsuza kadar bekleyecektir). Tıklanmadığında veya bir tuşa basıldığında belirli bir süre sonra devam etmesi için bir zamanlayıcı eklenebilir.
Hangi tuşa basıldığını döndürmez (ancak bunu yapmak için değiştirilebilir).
Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") : [tcl] invalid command name "toplevel".
)
R ve Rscript hem ''
readline'a gönderir hem de interaktif olmayan modda tarar (bkz. ? readline
). Çözüm, stdin
taramayı kullanarak zorlamaktır .
cat('Solution to everything? > ')
b <- scan("stdin", character(), n=1)
Misal:
$ Rscript t.R
Solution to everything? > 42
Read 1 item
Bu cevap Simon'un cevabına benzer , ancak bir satırsonu dışında fazladan girdi gerektirmez.
cat("Press Enter to continue...")
invisible(scan("stdin", character(), nlines = 1, quiet = TRUE))
Kullanılması nlines=1
yerine n=1
, kullanıcı basitçe basın Rscript devam etmek girebilirsiniz.
Rscript
: duraklar ve Enter
devam etmek için sadece vurmak gerekir.
Bunu yapmanın bir yolu (tür, bir tuş yerine bir düğmeye basmanız gerekir, ancak yeterince yakın) parlak kullanmaktır:
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")
Deneyimlerime göre, bunun benzersiz bir özelliği var: runApp
işlevi takip eden kod yazmış bir komut dosyası çalıştırsanız bile , uygulamadaki düğmeye basana kadar (uygulamaların kullanılmasını durduran düğme) çalışmaz stopApp
.