我正在编写R代码,我想让它以“非调试”或“调试”模式运行。在调试模式下,我希望代码打印出运行时信息。
在其他语言中,我通常会使用某种打印函数,除非打开一个标志(无论是编译还是运行时),它都不会执行任何操作。
例如,我可以使用#ifdef DEBUG(在编译时),或者在运行时设置调试级别。
在R中执行此操作的等效方法是什么?
答案 0 :(得分:9)
同样的事情,减去预处理器:
答案 1 :(得分:4)
Dirk答案的稍微有点版本:
is_debug_mode <- function()
{
exists(".DEBUG", envir = globalenv()) &&
get(".DEBUG", envir = globalenv())
}
set_debug_mode <- function(on = FALSE)
{
old_value <- is.debug.mode()
.DEBUG <<- on
invisible(old_value)
}
用法是,例如,
if(is_debug_mode())
{
#do some logging or whatever
}
和
set_debug_mode(TRUE) #turn debug mode on
set_debug_mode(FALSE) #turn debug mode off
答案 2 :(得分:2)
可能值得查看R.utils包中的Verbose
类,它可以非常精确地控制打印各种类型的运行时信息。
答案 3 :(得分:1)
扩展Richie的代码:
另外,您可以检查系统环境变量DEBUG以进行初始化:
isdbg <- function()
{
if(exists(".DEBUG", envir = globalenv()))
{
return(get(".DEBUG", envir = globalenv()))
} else #initialise from shell environment variable
{
debugmode <- !(toupper(Sys.getenv("DEBUG")) %in% c("", "FALSE", "0"))
assign(".DEBUG", debugmode, envir = globalenv())
return(debugmode)
}
}
setdbg <- function(on = FALSE)
{
old_value <- isdbg()
.DEBUG <<- on
invisible(old_value)
}
ifdbg <- function(x)
{
if(isdbg()) x
}
用法: setdbg(TRUE)#turn debug mode on setdbg(FALSE)#turn debug mode off
if(isdbg())
{
#do some logging or whatever
}
或
ifdebug(...do something here...)
答案 4 :(得分:0)