1

我正在考虑将recover()其用作错误选项。但是每次我遇到错误时,我都无法进行任何交互式调试,因为Enter a frame number, or 0 to exit无论我做什么它都会一直告诉我(我已经完整地评论了我在错误发生后键入的所有内容):

> options(error = recover)
> foo <- function() {x <- "foo"; stop(x)}
> foo()
Error in foo() : foo

Enter a frame number, or 0 to exit   

1: foo()

### I type '1'
Selection: 1
Called from: top level 
Browse[1]> 

Enter a frame number, or 0 to exit   

1: foo()

### I type 'x'
Selection: x
Enter an item from the menu, or 0 to exit

### I type 'objects()'
Selection: objects()
Enter an item from the menu, or 0 to exit

### I type '0'
Selection: 0

### Recover exits and R returns to normal

它唯一响应的似乎是 '0' to exit recover()。请注意,我没有按 Enter 键Browse[1]>- 它只是被跳过,我没有机会输入任何内容。

我究竟做错了什么?

R version 3.0.2 (2013-09-25)在 Windows 8.1 下使用 Revolution R Enterprise IDE (x64) 7.0.0

编辑

我认为这是与 Revolution R IDE 有关的问题,因为我使用默认的 RGui 控制台尝试了此操作,我可以在 at 处输入内容Browse[1]>并因此recover成功使用。如果任何有革命 R IDE 经验的人对此有任何进一步的见解,我将不胜感激。

4

2 回答 2

1

当您说options(error = recover)您正在停止一切以访问整个调用堆栈时。如果你有一个功能会更长,这会更明显。在您的情况下,当您输入 1 时,您会在评估时进入该函数foo。此函数保存一个x使用 的值调用的对象,"foo"如下所示。

> foo()
Error in foo() : foo

Enter a frame number, or 0 to exit   

1: foo()

Selection: 1
Called from: top level 
Browse[1]> ls()
[1] "x"
Browse[1]> x
[1] "foo"

如果您在当前通话中浏览完毕(在您的情况下在编号 1 下),您可以通过按 enter 或调用退出到“菜单” c(请参阅​​ 参考资料?browser)。

编辑

这是一个更长的示例,可能会向您展示做什么recover(基本上是一个菜单,可让您访问被调用的函数及其对象)。

> foo <- function(x) {
+   obj1 <- "object in foo"
+   foo2 <- function(y) {
+     obj2 <- "object in foo2"
+     stop()
+   }
+   foo2(x)
+ }
> 
> foo(letters)
Error in foo2(x) : 

Enter a frame number, or 0 to exit   

1: foo(letters)
2: #7: foo2(x)

Selection: 1 # go into function foo()
Called from: top level 
Browse[1]> ls()
[1] "foo2" "obj1" "x"   
Browse[1]> obj1
[1] "object in foo"
Browse[1]>  # i hit enter here

Enter a frame number, or 0 to exit   

1: foo(letters)
2: #7: foo2(x)

Selection: 2 # go into function foo2()
Called from: foo(letters)
Browse[1]> ls()
[1] "obj2" "y"   
Browse[1]> obj2
[1] "object in foo2"
于 2013-12-21T01:44:43.350 回答
0

我已经向 Revolution Analytics 提交了一份错误报告,到目前为止,这是他们的回复:

米洛,

感谢您的报告。正如我所指出的,已向开发团队提交了一个缺陷。通过控制台运行此代码按预期工作,并且只有通过脚本窗口才会失败。我正在关闭支持票,因为没有决定何时解决。

问候,

布赖恩平克尼

经理,革命分析技术支持

如果他们再次联系我,我会更新。

于 2013-12-29T03:32:58.133 回答