假设在R中有一系列函数相互调用:
a = function() {...b()...}
b = function() {...c()...}
c = function() {...d()...}
依此类推,其中......表示省略的代码。现在假设函数d达到令人满意的状态,并希望终止整个调用链并返回全局环境(假设这是从R GUI中运行)。函数d有没有办法终止整个调用链?我意识到stop()可以实现这一点,但是stop()会产生错误,这不是我想要的。我也不想使用quit(),因为我不想终止R GUI会话。
附录: 我也不想处理一系列return语句。这是因为调用函数不一定具有被调用函数的知识,可以插入和拔出调用函数。
答案 0 :(得分:0)
这不是很优雅,但你可以使用{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)
}
}