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