En la terminología R, que está deseando investigar el marco padre del entorno de evaluación g()
's (es decir, el entorno en el que se llamaba g
). Las funciones para hacerlo están documentadas en la página de ayuda para ?sys.parent
.
Una vez que su navegador indique que es 'debugging in g(x + 1)'
, puede hacer lo siguiente. (Gracias a Joshua Ulrich por sugerir where
para ayudar a localizar las posiciones en la pila de llamadas.)
# Confirm that you are where you think you are
where
# where 1 at #3: g(x + 1)
# where 2: f()
# Get a reference to g()'s parent frame (an environment object)
pframe <- parent.frame()
pframe
# <environment: 0x019b9174>
# Examine the contents of the parent frame
ls(env=pframe)
# [1] "x"
# Get the value of 'x' in the parent frame
get("x", env = pframe)
# [1] 1
EDITAR: Para comprender el conjunto de funciones que se describen en ?sys.parent
, es probablemente la pena señalar que parent.frame()
es (básicamente) taquigrafía para sys.frame(sys.parent(1))
. Si se encuentra en un entorno de evaluación más abajo en una pila de llamadas (como lo revela where
, por ejemplo), puede acceder a entornos que se encuentren más atrás en la pila de llamadas (digamos dos pasos) por parent.frame(2)
o sys.frame(sys.parent(2))
.
Tecleando 'where' mientras está en el navegador parece que sería útil determinar a cuántos marcos debe retroceder. –
Gracias a Joshua por esa sugerencia tan útil. Lo agarré directamente de tu comentario y lo pegué en la parte superior del bloque de código. –
Gracias a todos por las excelentes respuestas. – Alex