Как отследить несколько функций
Если у меня есть несколько взаимосвязанных функций, то может быть полезно проследить путь через них. Что использует 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)
Например, если я вызываю untrarace для каждой функции untrace(f)
на командной строке, это работает. Как мне создать функцию, которая бы отслеживала все мои функции одновременно?
1 ответ
Решение
Ну, поменяйте на:
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
!