2010-12-04 30 views
2

當你問ESS評估從一個緩衝區(CC,CB,或類似)用戶輸入和ESS

par(ask=TRUE) 
plot(1,1) 
plot(2,1) 

譯員進入一個無限循環以下,因爲ESS的說法開始R對話--no-readline的。循環可以用C-g打破,但是有什麼辦法讓解釋器真正地請求用戶輸入嗎?

回答

0

(策略從谷歌和RSiteSearches聚集):

你看到提示:「返回砸」在任何您的會話窗口?如果是這樣......打。

如果沒有,請嘗試單擊圖形窗口。

如果失敗了,應該用c-G控制回來。

編輯:另一種策略,誠然不是解決ESS-非交互性的問題:如果你想保持用戶輸入,然後readlines方法可採用:

input=file("stdin") 
print(readLines(input,1)) 
+0

提示僅在c-G打開後出現,並且c-G不會從等待用戶輸入的循環中跳出,它會停止執行剩餘的腳本。 – fgregg 2010-12-05 23:42:14

+1

因此,爲了清楚起見,會出現一個繪圖窗口,儘管在窗口中單擊以獲得焦點,但您看不到提示? – 2010-12-06 00:45:47

1

一種解決方法是編輯ess-r-d.el和刪除R給出的硬編碼--no-runtime選項,它是最新實現的第127行。

變化

(let* ((r-always-arg 
     (if (or ess-microsoft-p (eq system-type 'cygwin)) 
      "--ess " 
     "--no-readline ")) 

(let* ((r-always-arg 
     (if (or ess-microsoft-p (eq system-type 'cygwin)) 
      "--ess ")) 

如果有一個編譯版本,你必須編譯.el產生和替換二進制文件.elc

該文件可能是(該目錄的位置取決於您的操作系統)

  • site-lisp目錄

    。在emacs(^ X^F)中編輯.el文件,然後執行M-x byte-compile-file以生成.elc

  • 如果您從整個zip/tar源代碼包安裝在lisp目錄中。在這種情況下,更改後,執行make,然後執行make install

你當然需要有write訪問.el.elc文件。

如果你覺得不舒服的.el文件的編輯,你可以直接將其移除(.elc)和僅使用.el版本(應該是隻有輕微的性能差異)。