Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';它类似于R中的#ifdef调试?_R - Fatal编程技术网

什么';它类似于R中的#ifdef调试?

什么';它类似于R中的#ifdef调试?,r,R,我正在编写R代码,希望它在“非调试”或“调试”模式下运行。在调试模式下,我希望代码打印出运行时信息 在其他语言中,我通常会使用某种打印函数,除非打开标志(编译或运行时),否则该函数不会执行任何操作 例如,我可以在编译时使用#ifdef DEBUG,或者在运行时设置调试级别 在R中执行此操作的等效方法是什么?同样的方法,减去预处理器: 定义全局变量(或使用options()值) 插入测试变量的条件代码 使用您的函数(在包中添加…,verbose=options(myVerbose)),等等 我还

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

在其他语言中,我通常会使用某种打印函数,除非打开标志(编译或运行时),否则该函数不会执行任何操作

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


在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...)