[R] Debugging functions defined (locally) inside another functions

Ivan Krylov |kry|ov @end|ng |rom d|@root@org
Fri Apr 12 15:32:17 CEST 2024

В Fri, 12 Apr 2024 12:53:02 +0000
Iago Giné Vázquez <iago.gine using sjd.es> пишет:

> How should I call trace() if f was a function?

Let the tracer be quote(debug(g)) and use as.list(body(f)) to determine
where it should be injected:

f <- function() {
 message('exists("g") so far is ', exists('g'))
 g <- function() {
  flag <- TRUE
  if (flag) stop('an error')
 message('about to run g()')

In this example, step number 4 is message("about to run g()"), so
injecting a call to debug() before it should work:

trace(f, quote(debug(g)), at = 4)
# exists("g") so far is FALSE
# Tracing f() step 4 # <-- at this point debug(g) is run
# about to run g()
# debugging in: g()
# debug at #3: {
#    flag <- TRUE
#     if (flag)
#         stop("an error")
# }

help(trace) has an extensive example showing how to use it for many
similar purposes.

Best regards,

More information about the R-help mailing list