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

时间:2018-05-29 01:45:48

标签: r

假设在R中有一系列函数相互调用:

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

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

附录: 我也不想处理一系列return语句。这是因为调用函数不一定具有被调用函数的知识,可以插入和拔出调用函数。

1 个答案:

答案 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)
        }
    }