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