2012-04-12 22 views
3

如果我有幾個相互關聯的功能,那麼跟蹤通過它們的路徑會很有用。每次R進入或離開其中一個功能時,都使用trace函數給出消息。例如,如何取消多個功能

f <- function() g() 
g <- function() h() 
h <- function() 
{ 
if(runif(1) > 0.3) g() else 99 
} 

trace_my_fns <- function() 
{ 
    fn_names <- c("f", "g", "h") 
    invisible(trace(
    fn_names, 
    tracer = quote(0), 
    exit = quote(0), 
    where = globalenv() 
)) 
} 

trace_my_fns() 
set.seed(4) 
f() 

當我完成此跟蹤時,我需要取消跟蹤它們。

untrace_my_fns <- function() 
{ 
    fn_names <- c("f", "g", "h") 
    invisible(trace(
    fn_names, 
    where = globalenv() 
)) 
} 
untrace_my_fns() 

由於某種原因,這並不是正確地處理功能。看到這一點,看看

f 
body(f) 

如果我直接在條命令行調用untrace各項功能,例如untrace(f),它的工作原理。我應該如何創建一個功能來一次性取消我所有的功能?

回答

6

好,變化:

untrace_my_fns <- function() 
{ 
    fn_names <- c("f", "g", "h") 
    invisible(untrace(
    fn_names, 
    where = globalenv() 
)) 
} 

untrace_my_fns() 
set.seed(4) 
f() # no more tracing... 

...因爲你叫trace而不是untrace

+1

好吧,這很尷尬。非常醒目,謝謝。我現在要去做一個小小的falcepalm。 – 2012-04-13 06:38:21