R recover()停留在"输入一个帧号,或者0退出"

时间:2013-12-21 01:34:29

标签: r debugging recover

我正在考虑使用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'退出recover()。请注意,我没有按下Browse[1]>处的输入 - 它被简单地跳过,我没有机会输入任何内容。

我做错了什么?

我在Windows 8.1下使用{R}企业IDE(x64)7.0.0 R version 3.0.2 (2013-09-25)

修改

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

2 个答案:

答案 0 :(得分: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)退出“菜单”。 / p>

修改

这是一个更长的例子,它可以显示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"

答案 1 :(得分:0)

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

  米洛,

     

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

     

此致

     

Brian Pinkney

     

Revolution Analytics技术支持经理

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