Что похоже на #ifdef DEBUG в R? - PullRequest
7 голосов
/ 09 июня 2011

Я пишу код R, где мне бы хотелось, чтобы он работал в режиме «не отладка» или «отладка». В режиме отладки я хотел бы, чтобы код выводил информацию о времени выполнения.

В других языках у меня обычно есть какая-то функция печати, которая ничего не делает, если не включен флаг (либо для компиляции, либо для выполнения).

Например, я могу использовать #ifdef DEBUG (во время компиляции) или установить уровень отладки во время выполнения.

Каков эквивалентный способ сделать это в R?

Ответы [ 5 ]

9 голосов
/ 09 июня 2011

То же самое, за исключением препроцессора:

  • Определить переменную глобальной переменной (или использовать значение options())
  • Введите условный код, который проверяет переменную
  • Работает с вашими функциями (добавляя ..., verbose=options(myVerbose)), в ваши пакеты и т. П. Pp
  • Я также использовал его в сценариях R (управляемых littler ) с использованием пакета CRAN getopt , чтобы выбрать параметр командной строки --verbose или --debug.
4 голосов
/ 10 июня 2011

Немного причудливая версия ответа Дирка:

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 голосов
/ 09 июня 2011

Может также стоить взглянуть на класс Verbose в пакете R.utils , который позволяет очень точно контролировать печать информации времени выполнения различных типов.

1 голос
/ 16 января 2013

Расширение кода Ричи:

также вы можете проверить системную переменную окружения 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) # включить режим отладки setdbg (FALSE) # режим отладки выключен

if(isdbg())
{
  #do some logging or whatever
}

или

ifdebug(...do something here...)
0 голосов
/ 14 августа 2012

Другая возможность: log4r

Цитировать эту страницу:

log4r: простая система ведения журнала для R, основанная на log4j

logr4 предоставляет объектно-ориентированную систему ведения журналов, которая использует API, примерно эквивалентный log4j и связанным с ним вариантам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...