Если вы запустите следующий код все сразу (поэтому не строка за строкой), он даст вам то, что вы желаете
tmp <- function(x){
y <- 10
stop('foo')
}
x= 1
debug(tmp)
tmp(x)
n
n
v <<- y
n
Позвольте мне объяснить, что произошло.debug(tmp)
заставляет R запускать интерактивный сеанс отладки, как только вызывается tmp(x)
.
В нашем случае это всего лишь взлом, чтобы попасть в функциональную среду.В интерактивной ситуации n
заставит курсор перейти на следующую строку.Нам нужно пройти две строки вниз, прежде чем мы доберемся до строки, где определен y.
После того, как y = 10
запущен в функции, мы можем присвоить y нашей глобальной среде.Это то, что делает оператор <<-
.Он назначает переменную y в функциональной среде переменной v в глобальной среде.
Затем я выбираю выход из интерактивного сеанса, выполняя stop("foo")
, но вы также можете сделать что-то еще здесь, чтобы выйти изфункциональная среда, которая зависит от вас.
Если вы хотите увидеть, что происходит, вы можете просто выполнить эту строку построчно.