7

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

4

3 回答 3

8

以下是三种可能性:

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

browser <- list

并重新打开它

rm(browser)

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

接下来的两个解决方案稍长,但使用选项代替,以便不会将新变量引入全局环境。它们也是这样的,如果没有设置任何选项,那么就不会进行调试,所以如果你想调试,你只需要设置一个选项。该if解决方案可能比该expr解决方案更快,尽管它可能并不重要。

2)将 expr= 参数与 option 一起使用。将每个浏览器命令替换为:

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

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

options(Debug = TRUE)

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

options(Debug = NULL)

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

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

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

于 2011-06-17T13:14:38.557 回答
4

定义全局逻辑值

debug_mode <- TRUE

然后代替browser()使用

if (debug_mode) browser()
于 2011-06-17T08:18:48.807 回答
2

我认为这归结为调试功能的细微差别。如果您想有选择地控制 的使用browser(),请将其放在一个if允许您启用或禁用该功能的调试的内部。当您希望调用浏览器时,请明确表示

myfun(x, debug =  TRUE)
于 2011-06-17T06:59:19.257 回答