Что похоже на #ifdef DEBUG в R?
Я пишу R-код, где бы я хотел, чтобы он запускался либо в режиме "отладки", либо "отладки". В режиме отладки я хотел бы, чтобы код распечатывал информацию о времени выполнения.
В других языках у меня обычно была какая-то функция печати, которая ничего не делает, если флаг не включен (либо для компиляции, либо для времени выполнения).
Например, я могу использовать #ifdef DEBUG (во время компиляции) или установить уровень отладки во время выполнения.
Каким будет эквивалентный способ сделать это в R?
Ответы
Ответ 1
То же самое, минус препроцессор:
- Определите глобальную переменную (или используйте значение
options()
)
- Вставить условный код, который проверяет переменную
- Работает с вашими функциями (добавление
..., verbose=options(myVerbose))
в ваши пакеты и т.д. pp
- Я также использовал его в сценариях R (управляемый littler) с использованием пакета CRAN getopt, чтобы выбрать опцию командной строки
--verbose
или --debug
.
Ответ 2
Немного более приятная версия ответа Дирка:
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
Ответ 3
Также можно рассмотреть класс Verbose
в пакете R.utils, который позволяет очень точно контролировать запуск печати - временная информация разного рода.
Ответ 4
Расширение кода Ричи:
также вы можете проверить переменную системной среды 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...)
Ответ 5
Другая возможность - log4r
Чтобы процитировать эту страницу:
log4r: простая система регистрации для R, основанная на log4j
logr4 предоставляет объектно-ориентированную систему ведения журнала, которая использует API примерно эквивалентному log4j и связанным с ним вариантам.