在退出时访问功能状态(停止)

时间:2019-05-28 17:18:13

标签: r

设置以下功能:

tmp <- function(x){
      y <- 10
      stop('foo')
    }

实际上,这是我无法控制的功能;我无法更改其代码。

如何以编程方式调用y时知道函数中定义的stop的值?

交互式地,我可以执行以下操作:

options(error = quote(dump.frames("testdump", FALSE)))
tmp()
v <- get("y", testdump[[1]]) 
options(error = NULL)

我确实出错了,但由于有了y,仍然可以达到dump.frames的值。

我一直在阅读http://adv-r.had.co.nz/Exceptions-Debugging.html,但我一定错过了一个窍门,因为我无法以编程方式进行这项工作。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您一次全部运行以下代码(而不是逐行运行),它将为您提供所需的内容

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")退出交互式会话,但是您还可以在此处执行其他操作以退出功能环境,具体取决于您。

如果您想查看发生了什么,也可以逐行执行。