如果我有一些相互关联的函数,那么跟踪它们的路径会很有用。也就是说,trace
每次 R 进入或离开其中一个函数时,都会使用该函数给出一条消息。例如,
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)
在命令行中,它就可以工作。我应该如何创建一个函数来一次取消跟踪我的所有函数?