r - 无错误地停止 R 程序

标签 r debugging

有什么办法可以不出错地停止 R 程序吗?

例如,我有一个很大的源代码,定义了几个函数,然后对这些函数进行了一些调用。碰巧我编辑了一些函数,并希望在 R 环境中更新函数定义,但实际上并没有调用它们。

我定义了一个变量justUpdate,当它为TRUE时,希望在函数定义之后立即停止程序。

ReadInput <- function(...) ...
Analyze <- function(...) ...
WriteOutput <- function(...) ...

if (justUpdate)
    stop()
# main body
x <- ReadInput()
y <- Analyze(x)
WriteOutput(y)

我调用了 stop() 函数,但问题是它打印了一条错误消息。

ctrl+c 是另一个选项,但我想在特定行停止源。

q()quit() 的问题是它终止了 R session ,但我希望 R session 仍然打开。

正如 @JoshuaUlrich 提出的 browser() 可以是另一种选择,但仍然不完美,因为源在新环境中终止(即 R 提示符将更改为 Browser[1] > 而不是 >)。我们仍然可以按 Q 退出它,但我正在寻找简单的方法。

另一种选择是使用 if (! justUpdate) { main body } 但它只是清除问题,而不是解决问题。

还有更好的选择吗?

最佳答案

我找到了一个相当简洁的解决方案here 。诀窍是在调用stop()之前关闭所有错误消息。 。函数on.exit()用于确保错误消息随后再次打开。该函数如下所示:

stop_quietly <- function() {
  opt <- options(show.error.messages = FALSE)
  on.exit(options(opt))
  stop()
}

第一行关闭错误消息并将旧设置存储到变量 opt 。在此行之后,发生的任何错误都不会输出消息,因此,也 stop()不会导致打印任何消息。

根据R帮助,

on.exit records the expression given as its argument as needing to be executed when the current function exits.

当前函数为stop_quietly()stop() 时退出叫做。所以程序做的最后一件事是调用 options(opt)这将设置 show.error.messages恢复到之前的值 stop_quietly()被称为(大概但不一定是 TRUE )。

关于r - 无错误地停止 R 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14469522/

相关文章:

R中的实时自动递增ggplot

r - 列出前 n 个最重复的值,包括其他值

r - 在 R 中的 Dataframe 中的文本列上执行文本分析

android - 在调试器工具窗口中看不到协程选项卡

visual-studio - 如何删除另一个调试器以便 Visual Studio 可以调试脚本

r - 无法在 Windows 10 (x64) 下读取 R 中的 Microsoft Access 数据库

python - 为什么 'rmagic' %R 在读取文件时会导致错误,而 %%R 不会?

c++ - 如何在 Visual Studio 中的 DLL 上设置断点?

java - 如何找到所谓的线程

php - 调试长时间运行的 PHP 脚本