避免R中的浏览器调用

时间:2011-06-17 06:47:59

标签: debugging r browser non-interactive

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

3 个答案:

答案 0 :(得分:8)

以下是三种可能性:

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

browser <- list

并将其重新打开

rm(browser)

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

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

2)使用选项的expr =参数。将每个浏览器命令替换为:

browser(expr = isTRUE(getOption("Debug")))

然后将"Debug"选项定义为TRUE以启用调试。

options(Debug = TRUE)

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

options(Debug = NULL)

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

if (isTRUE(getOption("Debug"))) browser()

然后设置Debug选项,或者不像前一点那样设置。

答案 1 :(得分:4)

定义全局逻辑值

debug_mode <- TRUE

然后使用

代替browser()
if (debug_mode) browser()

答案 2 :(得分:2)

我认为这只是细致地使用调试功能。如果要有选择地控制browser()的使用,请将其放在if内,以便启用或禁用该函数的调试。当您想要调用浏览器时,请将其显式化为

myfun(x, debug =  TRUE)
相关问题