该browser函数可以像断点一样使用:代码执行将在调用点处暂停。然后,用户可以检查变量值,执行任意R代码,并逐行逐步执行该代码。
一旦browser()在代码中命中,交互式解释器将启动。任何R代码都可以正常运行,此外还存在以下命令,
| 命令 | 含义 | 
|---|---|
| C | 退出浏览器并继续程序 | 
| F | 完成电流回路或功能 | 
| ñ | 单步执行(评估下一条语句,单步执行函数调用) | 
| s | 进入(评估下一条语句,进入函数调用) | 
| 哪里 | 打印堆栈跟踪 | 
| [R | 调用“恢复”重启 | 
| 问 | 退出浏览器并退出 | 
例如,我们可能有一个脚本,
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]> Qbrowser() 也可以用作功能链的一部分,如下所示:
mtcars %>% group_by(cyl) %>% {browser()}