使用浏览器

browser 函数可以像断点一样使用:代码执行将在调用它时暂停。然后,用户可以检查变量值,执行任意 R 代码并逐行逐步执行代码。

一旦在代码中命中了 browser(),交互式解释器就会启动。任何 R 代码都可以正常运行,此外还有以下命令,

命令 含义
C 退出浏览器并继续程序
F 完成电流回路或功能
ñ 跳过(评估下一个语句,逐步调用函数调用)
小号 Step Into(评估下一个语句,进入函数调用)
哪里 打印堆栈跟踪
[R 调用 resume 重启
Q 退出浏览器并退出

例如,我们可能有一个类似的脚本,

toDebug <- function() {
    a = 1
    b = 2
    
    browser()
    
    for(i in 1:100) {
        a = a * b
    }
}

toDebug()

运行上面的脚本时,我们最初会看到类似的东西,

Called from: toDebug
Browser[1]>

然后,我们可以与提示进行交互,

Called from: toDebug
Browser[1]> a
[1] 1
Browser[1]> b
[1] 2
Browse[1]> n
debug at #7: for (i in 1:100) {
    a = a * b
}
Browse[2]> n
debug at #8: a = a * b
Browse[2]> a
[1] 1
Browse[2]> n
debug at #8: a = a * b
Browse[2]> a
[1] 2
Browse[2]> Q

browser() 也可以用作功能链的一部分,如下所示:

mtcars %>% group_by(cyl) %>% {browser()}