2009-09-15 77 views
8

我想知道是否有人知道如果我正在評估一個區域或緩衝區時,是否有任何方法讓R或ESS停止執行超出發生錯誤的點的代碼的其餘部分(I在幫助檔案中只發現了相反的請求)。我正在查看R幫助文件,但option(error=stop)只會停止執行違規函數或語句,但不會執行違規函數或語句。謝謝!強制停止或出現錯誤

回答

2

?break

只讓你走出循環。

?試試

讓您設置可能失敗並正常恢復的代碼。

+0

謝謝你,但交互工作的時候,我不想要包裝試線或區域()或tryCatch()每次,但我想這將在技術上做到這一點... – hatmatrix 2009-09-16 05:54:54

+0

嗨crippledlambda。你同時找到你的問題的解決方案? – giordano 2013-04-18 08:36:46

4

According to the ESS manual,這應該工作: C-c C-c(COMINT-中斷子作業) 發送一個Control-C信號給ESS過程。這具有中止當前命令的效果。

約翰福克斯有一個網站,他提供了ESS的配置。在這裏面,他有這方面的功能:

(defun stop-R() 

"Interrupt R process in lower window." 

(interactive) 

(select-window win2) 

(comint-interrupt-subjob) 

(select-window win1)) 

你應該能夠在XEmacs中使用該功能添加到菜單:

(defun R-menu() 

    "Hook to install R menu and sub-menus" 

    (add-menu-item '("ESS" "R") "Interrupt computation" 'stop-R 
) 
) 
(add-hook 'ess-mode-hook 'R-menu) 

你可以看看他的配置文件和文檔的其餘部分看看它是否對你感興趣。我還沒有嘗試過,但我希望它適合你!

查理

+0

謝謝查理 - 我熟悉抄送抄送,但這是手動停止正在進行的進程,而不管錯誤是什麼(據我瞭解),當發生錯誤時,我可能會考慮修改eval-region或eval-buffer來調用此函數。 – hatmatrix 2009-09-27 09:18:37

11

如果R/ESS霸佔了這麼多的計算時間是您的Emacs/ESS是反應遲鈍C-C,C-C還可以通過從終端發送中斷信號保存。

首先:使用topps找出R的processID。 (我的是98490 然後: kill -2 98490 這發出一箇中斷信號,你會得到你的ESS/Emacs和R對話回來

相關問題