我想知道是否有好的方法可以让R或ESS在评估区域或缓冲区时,在出现错误的地方停止执行代码的其余部分(我只在帮助档案中找到了相反的请求)。我在R帮助文件中查找,但是option(error=stop)
只会停止有问题的函数或语句的执行,而不是后续的语句。谢谢!
如果 R/ESS 占用了大量的计算时间,导致您的 emacs/ESS 对 C-c C-c 命令无响应,您也可以通过从终端发送 INTERRUPT 信号来解决。
首先:使用 top
或 ps
找出 R 的进程 ID。(我的是 98490)
然后:
kill -2 98490
这将发送一个中断信号,您将恢复 ESS/Emacs 和 R 会话。
根据 ESS 手册, 应该可以这样操作:
C-c C-c
(comint-interrupt-subjob)
向 ESS 进程发送一个 Control-C
信号,这将中止当前正在运行的命令。
John Fox 在其网站上提供了 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)
?break
只能让你跳出循环。
?try
允许你编写可能会失败并且能够优雅地恢复的代码块。