【发布时间】:2010-11-28 13:30:33
【问题描述】:
我想知道如果我正在评估一个区域或缓冲区,是否有人知道让 R 或 ESS 停止执行超出错误发生点的其余代码的好方法(我只发现了相反的情况帮助档案中的请求)。我正在查看 R 帮助文件,但 option(error=stop) 只会停止执行有问题的函数或语句,但不会停止执行它后面的那些。谢谢!
【问题讨论】:
我想知道如果我正在评估一个区域或缓冲区,是否有人知道让 R 或 ESS 停止执行超出错误发生点的其余代码的好方法(我只发现了相反的情况帮助档案中的请求)。我正在查看 R 帮助文件,但 option(error=stop) 只会停止执行有问题的函数或语句,但不会停止执行它后面的那些。谢谢!
【问题讨论】:
According to the ESS manual,这应该可以:
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)
您可以查看他的其余配置文件和文档,看看您是否感兴趣。我还没有尝试过,但我希望它对你有用!
查理
【讨论】:
如果 R/ESS 占用了太多计算时间,以至于您的 emacs/ESS 对 C-c C-c 没有响应,您也可以通过从终端发送 INTERRUPT 信号来保存它。
首先:使用top 或ps 找出R 的processID。 (我的是 98490
然后:
kill -2 98490
这会发送一个中断信号,然后您会恢复 ESS/Emacs 和 R 会话
【讨论】:
?破
只会让你脱离循环。
?试试
允许您设置可能失败并正常恢复的代码。
【讨论】: