设置以下功能:
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,但我一定错过了一个窍门,因为我无法以编程方式进行这项工作。
谢谢!
答案 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")
退出交互式会话,但是您还可以在此处执行其他操作以退出功能环境,具体取决于您。
如果您想查看发生了什么,也可以逐行执行。