2017-06-02 51 views
1

通常,当我在R中的一个函数上调用debug()时,它只是遍历函数,但有时它会跟随调用堆栈向下。我无法弄清楚为什么会发生一场比赛。R中调试()的级别

举例来说,如果我有

f <- function(x){ 
    print(x) 
} 

通常运行

debug(f) 
f("Hello World") 

只会显示

function(x) print(x) 

有时候它会进入印刷方法本身和我的代码见方法调度和

function (x, digits = NULL, quote = TRUE, na.print = NULL, print.gap = NULL, 
    right = FALSE, max = NULL, useSource = TRUE, ...) 
{ 
    noOpt <- missing(digits) && missing(quote) && missing(na.print) && 
    missing(print.gap) && missing(right) && missing(max) && 
    missing(useSource) && missing(...) 
    .Internal(print.default(x, digits, quote, na.print, print.gap, 
      right, max, useSource, noOpt)) 
} 

这对调试我写的函数没有帮助。有谁知道如何选择debug()是否陷入调用堆栈?谢谢!

回答

0

debug本身从来没有落下调用堆栈 - 它显示了你正是那些功能debug ging,没有什么更多,没有什么。

在这种特殊情况下,还有为什么你会发现自己在另一个函数有两个原因:

  1. 你不小心debug GED该功能为好,即你叫debug(print.default)
  2. 在调试过程中,您将分为这个函数。在R控制台中,当您按s而不是n(“进入”而不是“下一个”)时会发生这种情况。在RStudio中,这两个操作都有相应的按钮。

可能导致发现自己另一个函数内部时options(error)设置适当的发生,或当函数包含browser()的显式调用其他的事情。