
The frame position on the stack can be computed by counting frames from the global frame (the bottom of the stack, the default) or from the current frame (the top of the stack).
frame_position(frame, from = c("global", "current"))
The environment of a frame. Can be any object with a
get_env()
method. Note that for frame objects, the position from
the global frame is simply frame$pos
. Alternatively, frame
can be an integer that represents the position on the stack (and
is thus returned as is if from
is "global".
Whether to compute distance from the global frame (the bottom of the evaluation stack), or from the current frame (the top of the evaluation stack).
These functions are in the questioning stage. We are no longer convinced they belong in rlang as they are mostly for REPL interaction and runtime inspection rather than function development.
While this function returns the position of the frame on the evaluation stack, it can safely be called with intervening frames as those will be discarded.
# NOT RUN {
fn <- function() g(environment())
g <- function(env) frame_position(env)
# frame_position() returns the position of the frame on the evaluation stack:
fn()
identity(identity(fn()))
# Note that it trims off intervening calls before counting so you
# can safely nest it within other calls:
g <- function(env) identity(identity(frame_position(env)))
fn()
# You can also ask for the position from the current frame rather
# than the global frame:
fn <- function() g(environment())
g <- function(env) h(env)
h <- function(env) frame_position(env, from = "current")
fn()
# }
Run the code above in your browser using DataLab