如何在不使用 stop() 或 quit() 的情况下终止 R 中的调用链?

  • 本文关键字:情况下 终止 调用 stop quit r
  • 更新时间 :
  • 英文 :


假设在R中有一个相互调用的函数序列:

a = function() {...b()...}
b = function() {...c()...}
c = function() {...d()...}

等等,哪里...指示省略的代码。现在假设函数 d 达到令人满意的状态,并希望终止整个调用链并返回到全局环境(假设这是从 R GUI 中运行的(。函数 d 有没有办法终止整个调用链?我意识到 stop(( 可以实现这一点,但 stop(( 会生成一个错误,这不是我想要的。我也不想使用 quit((,因为我不想终止 R GUI 会话。

补遗: 我也不想处理一连串的退货报表。这是因为调用函数不一定知道被调用的函数,可以这么说,可以插入和拔出这些函数。

这不是很优雅,但您可以使用一个"break"变量,该变量存在于使用<<-的函数环境中。也许是这样的:

do_break <- FALSE
a = function(break = do_break) {
...
if(condition) {
do_break <<- TRUE
}
if(!do_break) {
b(do_break)
}
...
}
b = function(break = do_break) {
...
if(condition) {
do_break <<- TRUE
}
if(!do_break) {
c(do_break)
}
...
}
c = function(break = do_break) {
...
if(condition) {
do_break <<- TRUE
}
if(!do_break) {
d(do_break)
}
}

最新更新