有什么办法可以不出错地停止 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/