2009-09-15 73 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对话回来

相关问题