什么';它类似于R中的#ifdef调试?
我正在编写R代码,希望它在“非调试”或“调试”模式下运行。在调试模式下,我希望代码打印出运行时信息 在其他语言中,我通常会使用某种打印函数,除非打开标志(编译或运行时),否则该函数不会执行任何操作 例如,我可以在编译时使用#ifdef DEBUG,或者在运行时设置调试级别什么';它类似于R中的#ifdef调试?,r,R,我正在编写R代码,希望它在“非调试”或“调试”模式下运行。在调试模式下,我希望代码打印出运行时信息 在其他语言中,我通常会使用某种打印函数,除非打开标志(编译或运行时),否则该函数不会执行任何操作 例如,我可以在编译时使用#ifdef DEBUG,或者在运行时设置调试级别 在R中执行此操作的等效方法是什么?同样的方法,减去预处理器: 定义全局变量(或使用options()值) 插入测试变量的条件代码 使用您的函数(在包中添加…,verbose=options(myVerbose)),等等 我还
在R中执行此操作的等效方法是什么?同样的方法,减去预处理器:
- 定义全局变量(或使用
值)options()
- 插入测试变量的条件代码
- 使用您的函数(在包中添加
,等等…,verbose=options(myVerbose))
- 我还在R脚本中使用了它(由CRAN包驱动),使用CRAN包选择命令行选项
或--verbose
--debug
Verbose
类,它允许您非常精细地控制各种运行时信息的打印。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)
}
及
另一种可能性是
引用本页:
log4r:基于log4j的一个简单的R日志系统
logr4提供了一个使用API的面向对象日志记录系统
大致相当于log4j及其相关变体
扩展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
}
或
set_debug_mode(TRUE) #turn debug mode on
set_debug_mode(FALSE) #turn debug mode off
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
}
if(isdbg())
{
#do some logging or whatever
}
ifdebug(...do something here...)