2011-06-08 7 views
6

Piszę kod R, w którym chciałbym, aby był uruchomiony w trybie "nie debugowania" lub "debugowania". W trybie debugowania chciałbym, aby kod wydrukował informacje o środowisku wykonawczym.Co jest podobne do #ifdef DEBUG w R?

W innych językach, zwykle posiadam jakąś funkcję drukowania, która nic nie robi, chyba że flaga jest włączona (zarówno dla kompilacji, jak i dla środowiska wykonawczego).

Na przykład mogę użyć #ifdef DEBUG (w czasie kompilacji) lub ustawić poziom debugowania w czasie wykonywania.

Jaki byłby równoważny sposób robienia tego w R?

Odpowiedz

9

samo, minus preprocesor:

  • Zdefiniuj zmienną globalną zmienną (lub użyć wartości options())
  • Wstaw warunkowego kod, który sprawdza zmiennej
  • współpracuje z funkcjami (dodawanie ..., verbose=options(myVerbose)) , w twoich pakietach, itp. pp
  • Używam go również w skryptach R (sterowanych przez littler) przy użyciu pakietu CRAN getopt, aby pobrać opcję wiersza polecenia --verbose o r --debug.
2

To może również być warte patrząc na klasę Verbose w pakiecie R.utils, który umożliwia bardzo dokładną kontrolę do drukowania informacji w czasie wykonywania różnych rodzajów.

4

Nieco bardziej wyszukane wersja Dirk odpowiedzi:

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) 
} 

zastosowań jest, na przykład,

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

i

set_debug_mode(TRUE) #turn debug mode on 
set_debug_mode(FALSE) #turn debug mode off 
0

Inną możliwością jest log4r

Cytując stronę:

Log4r: prosty system logowania dla R, na podstawie log4j

logr4 zapewnia system rejestrowania obiektowego, który używa API grubsza odpowiada log4j i jej pokrewnych wariantów.

1

Rozszerzanie Richiego kod:

również można sprawdzić na środowisko systemu zmiennej DEBUG dla inicjalizacji:

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 
} 

Wykorzystanie: setdbg (TRUE) #turn debug mode na setdbg (FALSE) # odwróć tryb debugowania wyłączony

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

lub

ifdebug(...do something here...)