2014-11-04 60 views
1

我想暫停我的代碼了一小會兒,時間對我來說,觀察圖。R:我不能暫停我的代碼

我嘗試:

print('A') 
something = readline("Press Enter") 
print('B') 
print('C') 

,那麼就沒有停頓,線print('B')被饋送的ReadLine並獲得存儲到something因此僅AC得到打印在屏幕上。需要注意的是,如果我添加Something = readline("Press Enter")print("B")之間的空行,然後print("B")得到印在屏幕上,但仍然控制檯不允許用戶按繼續之前進入。

而且我想:

print('A') 
Sys.sleep(3) 
print('B') 
print('C') 

程序等待3秒開始前,然後運行「正常」,而不做print('A')print('B')之間的任何停頓。

我怎麼missunderstand?


這裏是我的[R版本:如果您貼上您的腳本成R控制檯,或如Rstudio執行它時,redline函數讀取R 3.1.1 GUI 1.65 Snow Leopard build (6784)

+0

如果你是複製/粘貼到R控制檯中的第一個塊,你實際上按在做進入(有每行的最後一個換行符)。我無法重現你得到的第二塊(系統在第一行之後實際停止)。 – nicola 2014-11-04 19:14:02

回答

1

readline的問題是,然後將腳本的下一行作爲控制檯條目讀入,在您的情況下將something的值設置爲print('B)

一個簡單的方法來解決這個問題是要堅持在函數整個代碼,然後調用函數來運行它。所以,你的情況:

myscript = function(){ 

    print('A') 
    something = readline(prompt = "Press Enter") 
    print('B') 
    print('C') 

} 

myscript() 

這樣做的輸出,我(在Rstudio,有R版本3.1.1):

[1] "A" 
Press Enter 
[1] "B" 
[1] "C" 

這一直覺得自己像一個黑客攻擊的一位給我,但它基本上是readline documentation在其示例中推薦的。

我從來沒有在我的代碼中使用sleep,所以我不能幫助你。

編輯澄清基於評論:如果myscript()是腳本的最後一行這隻會工作,或者如果它正在運行的腳本生成功能後手動輸入到控制檯。否則,您將遇到與以前相同的問題 - 將自動輸入下一行代碼。

+0

哦,這太奇怪了!你絕對解決了我的問題,謝謝!然而,我不明白爲什麼在一個函數中包裝整個代碼會使'readline'按我希望的那樣工作。 – 2014-11-04 19:20:53

+0

如果'readline'是從script_的最後一個函數調用的,那麼在它之後不會再讀取更多的代碼行,而R實際上會等待您的輸入。要嘗試這一點,請嘗試逐行運行原始腳本,或者在最後一行之後使用'#comment'在我的答案中運行腳本。 – Joe 2014-11-04 19:31:18