我正在考虑使用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经验的人对此有任何进一步的了解,我将非常感激。
答案 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技术支持经理
如果他们再次联系我,我会更新。