避免R中的浏览器调用

Rom*_*rik 7 browser debugging r non-interactive

我有一个精心编写的脚本,跨越多个函数(和文件).出于调试目的,我需要将browser调用嵌入到各种角落和缝隙中.当我想要修复一些东西时,我想在没有调试的情况下运行整个事情,而是避免browser调用,因为注释掉所有浏览器调用将意味着我的努力.@mdsumner on R chat建议以非交互模式运行脚本(即在Windows上使用Rscript.exe),但我可以在我的控制台中完成这项工作,以便能够访问traceback.我已经浏览了浏览器文档,我找不到任何可以接近我想要实现的选项.有什么建议?

G. *_*eck 8

这里有三个可能性:

1)覆盖浏览器命令.将此命令添加到全局工作空间以关闭浏览器命令:

browser <- list
Run Code Online (Sandbox Code Playgroud)

并重新打开它

rm(browser)
Run Code Online (Sandbox Code Playgroud)

这可能是最简单的,但由于browser变量留在全球环境中,因此有点难看.

接下来的两个解决方案稍长,但使用选项,以便不会在全局环境中引入新变量.此外,如果没有设置选项,则不进行任何调试,因此您只需设置一个选项即可进行调试.该if解决方案可能比更快expr的解决方案,虽然它可能不是物质.

2)使用expr = argument和option.将每个浏览器命令替换为:

browser(expr = isTRUE(getOption("Debug")))
Run Code Online (Sandbox Code Playgroud)

然后定义要打开调试的"Debug"选项TRUE.

options(Debug = TRUE)
Run Code Online (Sandbox Code Playgroud)

或将其设置为其他内容或删除它以关闭调试:

options(Debug = NULL)
Run Code Online (Sandbox Code Playgroud)

3)使用if选项.将每个浏览器命令替换为:

if (isTRUE(getOption("Debug"))) browser()
Run Code Online (Sandbox Code Playgroud)

然后Debug像在前一点中那样设置选项.