В терминологии R вы хотите исследовать родительский фрейм среды оценки g()
(т. Е. Среды, в которой вызывался g
).Функции для этого описаны на странице справки для ?sys.parent
.
Как только ваш браузер покажет, что вы 'debugging in g(x + 1)'
, вы можете сделать следующее.(Спасибо Джошуа Ульриху за предложение where
помочь найти свое положение в стеке вызовов.)
# 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
РЕДАКТИРОВАТЬ : понять набор функций, описанных в ?sys.parent
,вероятно, стоит отметить, что parent.frame()
является (в основном) сокращением для sys.frame(sys.parent(1))
.Если вы окажетесь в среде оценки дальше вниз по стеку вызовов (как показано, например, where
), вы можете получить доступ к средам, которые находятся дальше в резервной копии стека вызовов (скажем, на два шага вверх), либо parent.frame(2)
или sys.frame(sys.parent(2))
.