Ответ 1
В терминологии 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() 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))
.