【问题标题】:Force stop or halt on error错误时强制停止或暂停
【发布时间】:2010-11-28 13:30:33
【问题描述】:

我想知道如果我正在评估一个区域或缓冲区,是否有人知道让 R 或 ESS 停止执行超出错误发生点的其余代码的好方法(我只发现了相反的情况帮助档案中的请求)。我正在查看 R 帮助文件,但 option(error=stop) 只会停止执行有问题的函数或语句,但不会停止执行它后面的那些。谢谢!

【问题讨论】:

    标签: r emacs ess


    【解决方案1】:

    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)
    

    您可以查看他的其余配置文件和文档,看看您是否感兴趣。我还没有尝试过,但我希望它对你有用!

    查理

    【讨论】:

    • 谢谢查理 - 我熟悉 C-c C-c 但这是为了手动停止正在进行的进程,无论错误如何(据我所知)。我可能会考虑修改 eval-region 或 eval-buffer 以在发生错误时调用此函数...
    【解决方案2】:

    如果 R/ESS 占用了太多计算时间,以至于您的 emacs/ESS 对 C-c C-c 没有响应,您也可以通过从终端发送 INTERRUPT 信号来保存它。

    首先:使用topps 找出R 的processID。 (我的是 98490 然后: kill -2 98490 这会发送一个中断信号,然后您会恢复 ESS/Emacs 和 R 会话

    【讨论】:

      【解决方案3】:

      ?破

      只会让你脱离循环。

      ?试试

      允许您设置可能失败并正常恢复的代码。

      【讨论】:

      • 谢谢,但在交互工作时,我不想每次都在 try() 或 tryCatch() 中换行,但我想从技术上讲会这样做......
      • 嗨 crippledlambda。在此期间,您找到解决问题的方法了吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      相关资源
      最近更新 更多