जवाबों:
जैसा कि किसी ने पहले ही एक टिप्पणी में लिखा है, आपको पहले बिल्ली का उपयोग करने की आवश्यकता नहीं है readline()
। बस लिखें:
readline(prompt="Press [enter] to continue")
आप एक चर निर्दिष्ट करने के लिए नहीं करना चाहते हैं और एक वापसी कंसोल में मुद्रित नहीं करना चाहते हैं, लपेट readline()
एक में invisible()
:
invisible(readline(prompt="Press [enter] to continue"))
press esc keep to exit loop
?
विधि 1
प्रतीक्षा करें जब तक आप कंसोल में [एंटर] दबाएं:
cat ("Press [enter] to continue")
line <- readline()
एक समारोह में लपेटकर:
readkey <- function()
{
cat ("Press [enter] to continue")
line <- readline()
}
यह फ़ंक्शन Console.ReadKey()
C # में सबसे अच्छा समकक्ष है ।
विधि 2
जब तक आप कीबोर्ड पर [एंटर] कीस्ट्रोक नहीं टाइप करते हैं, तब तक रुकें। इस पद्धति का नुकसान यह है कि यदि आप कोई ऐसी चीज़ टाइप करते हैं जो कोई संख्या नहीं है, तो यह एक त्रुटि प्रदर्शित करेगा।
print ("Press [enter] to continue")
number <- scan(n=1)
एक समारोह में लपेटकर:
readkey <- function()
{
cat("[press [enter] to continue]")
number <- scan(n=1)
}
विधि 3
कल्पना कीजिए कि आप एक ग्राफ़ पर किसी अन्य बिंदु को प्लॉट करने से पहले एक कुंजीपट की प्रतीक्षा करना चाहते हैं। इस स्थिति में, हम एक ग्राफ के भीतर एक keypress की प्रतीक्षा करने के लिए 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 का उपयोग करें । क्रांति आर v6.1 के साथ विंडोज 7 x64 के साथ काम करता है। RStudio के तहत काम नहीं करता है (क्योंकि यह win.graph का उपयोग नहीं करता है)।
prompt
तर्क का उपयोग करके छोटा किया जा सकता है readline
। यदि आप what=""
कॉल करने के लिए जोड़े गए हैं, तो विधि 2 किसी भी इनपुट (न केवल संख्या) के साथ काम करेगी scan
। getGraphicsEvent
केवल कुछ प्लेटफार्मों पर विशिष्ट ग्राफिक्स उपकरणों पर काम करता है (लेकिन यदि आप उन उपकरणों में से एक का उपयोग कर रहे हैं जो ठीक काम करते हैं)।
if(line == "Q") stop()
यहाँ एक छोटा सा फ़ंक्शन (टैल्कट पैकेज का उपयोग करके) है जो एक छोटी सी खिड़की खोलेगा और तब तक प्रतीक्षा करेगा जब तक कि आप जारी बटन पर क्लिक करें या किसी भी कुंजी को दबाएं (जबकि छोटी खिड़की पर अभी भी फोकस है), तो यह आपकी स्क्रिप्ट को जारी रखने देगा।
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".
''
गैर-संवादात्मक मोड में रीडलाइन और स्कैन करने के लिए आर और रूपए दोनों भेजते हैं (देखें ? 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
, उपयोगकर्ता केवल रुपये को जारी रखने के लिए एंटर दबा सकता है।
Rscript
: यह रुकता है और Enter
जारी रखने के लिए केवल हिट करने की आवश्यकता होती है ।
इसे करने का एक तरीका (थोड़े, आपको कुंजी के बजाय एक बटन दबाना होगा, लेकिन काफी करीब है) चमकदार का उपयोग करना है:
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
)।