This is because you are calling dive through eval . The following is an example:
> dive = function(level = 1, max.depth = 5) + { + m = match.call() + print(sys.calls()) + cat("======================\n\n") + m[[2]] = m[[2]]+1 + if(m[[2]] > max.depth) + stop("Not actually an error -- we're just tripping out!") + eval(m) + } > > dive(level = 1, max.depth = 3) [[1]] dive(level = 1, max.depth = 3) ====================== [[1]] dive(level = 1, max.depth = 3) [[2]] eval(m) [[3]] eval(expr, envir, enclos) [[4]] dive(level = 2, max.depth = 3) ====================== [[1]] dive(level = 1, max.depth = 3) [[2]] eval(m) [[3]] eval(expr, envir, enclos) [[4]] dive(level = 2, max.depth = 3) [[5]] eval(m) [[6]] eval(expr, envir, enclos) [[7]] dive(level = 3, max.depth = 3) ====================== Error in dive(level = 3, max.depth = 3) : Not actually an error -- we're just tripping out!
Here is a modified version that is incremented by one.
> dive = function(level = 1, max.depth = 5) + { + print(sys.calls()) + cat("======================\n\n") + if(level+1 > max.depth) + stop("Not actually an error -- we're just tripping out!") + dive(level+1, max.depth) + } > > dive(level = 1, max.depth = 3) [[1]] dive(level = 1, max.depth = 3) ====================== [[1]] dive(level = 1, max.depth = 3) [[2]] dive(level + 1, max.depth) ====================== [[1]] dive(level = 1, max.depth = 3) [[2]] dive(level + 1, max.depth) [[3]] dive(level + 1, max.depth) ====================== Error in dive(level + 1, max.depth) : Not actually an error -- we're just tripping out!
kohske
source share