什么类似于R中的#ifdef DEBUG?

时间:2011-06-08 22:33:50

标签: r

我正在编写R代码,我想让它以“非调试”或“调试”模式运行。在调试模式下,我希望代码打印出运行时信息。

在其他语言中,我通常会使用某种打印函数,除非打开一个标志(无论是编译还是运行时),它都不会执行任何操作。

例如,我可以使用#ifdef DEBUG(在编译时),或者在运行时设置调试级别。

在R中执行此操作的等效方法是什么?

5 个答案:

答案 0 :(得分:9)

同样的事情,减去预处理器:

  • 定义全局变量变量(或使用options()值)
  • 插入测试变量的条件代码
  • 使用您的功能(在您的软件包中添加..., verbose=options(myVerbose))等)pp
  • 我还在R脚本中使用它(由littler驱动),使用CRAN包getopt来获取命令行选项--verbose--debug。< / LI>

答案 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)

另一种可能性是log4r

引用此页:

  

log4r:R的简单日志系统,基于log4j

     

logr4提供了一个使用API​​的面向对象的日志记录系统   大致相当于log4j及其相关变体。