跟踪在另一个函数内声明的函数
Trace function which is declared inside another function
我有以下代码:
abc <- function() {
def <- function() { }
def_enter <- function() { print("def_enter") }
def_exit <- function() { print("def_exit") }
trace(def, def_enter, exit = def_exit)
def()
}
abc_enter <- function() { print("abc_enter") }
abc_exit <- function() { print("abc_exit") }
trace(abc, abc_enter, exit = abc_exit)
abc()
我希望这样的输出:
> abc()
Tracing abc() on entry
[1] "abc_enter"
Tracing def() on entry
[1] "def_enter"
Tracing def() on exit
[1] "def_exit"
Tracing abc() on exit
[1] "abc_exit"
NULL
但是得到这样的输出:
> abc()
Tracing abc() on entry
[1] "abc_enter"
Tracing function "def" in package "base"
Tracing abc() on exit
[1] "abc_exit"
NULL
是否有可能得到我期望的输出?我该如何修复上面的代码?
您需要指定trace
中函数的调用环境。
只需在 abc
:
的定义中的 trace 的参数 where
中提及即可
abc <- function() {
def <- function() { }
def_enter <- function() { print("def_enter") }
def_exit <- function() { print("def_exit") }
trace(def, def_enter, exit = def_exit, where=environment())
def()
}
并且通过调用abc
,您将得到预期的结果:
#>abc()
#Tracing abc() on entry
#[1] "abc_enter"
#Tracing function "def" in package ".GlobalEnv"
#Tracing def() on entry
#[1] "def_enter"
#Tracing def() on exit
#[1] "def_exit"
#Tracing abc() on exit
#[1] "abc_exit"
#NULL
我有以下代码:
abc <- function() {
def <- function() { }
def_enter <- function() { print("def_enter") }
def_exit <- function() { print("def_exit") }
trace(def, def_enter, exit = def_exit)
def()
}
abc_enter <- function() { print("abc_enter") }
abc_exit <- function() { print("abc_exit") }
trace(abc, abc_enter, exit = abc_exit)
abc()
我希望这样的输出:
> abc()
Tracing abc() on entry
[1] "abc_enter"
Tracing def() on entry
[1] "def_enter"
Tracing def() on exit
[1] "def_exit"
Tracing abc() on exit
[1] "abc_exit"
NULL
但是得到这样的输出:
> abc()
Tracing abc() on entry
[1] "abc_enter"
Tracing function "def" in package "base"
Tracing abc() on exit
[1] "abc_exit"
NULL
是否有可能得到我期望的输出?我该如何修复上面的代码?
您需要指定trace
中函数的调用环境。
只需在 abc
:
where
中提及即可
abc <- function() {
def <- function() { }
def_enter <- function() { print("def_enter") }
def_exit <- function() { print("def_exit") }
trace(def, def_enter, exit = def_exit, where=environment())
def()
}
并且通过调用abc
,您将得到预期的结果:
#>abc()
#Tracing abc() on entry
#[1] "abc_enter"
#Tracing function "def" in package ".GlobalEnv"
#Tracing def() on entry
#[1] "def_enter"
#Tracing def() on exit
#[1] "def_exit"
#Tracing abc() on exit
#[1] "abc_exit"
#NULL