R调用栈详细检查

R call stack detailed inspection

我正在寻找处理调用堆栈日志记录的正确方法。
我有功能,可以记录他们对列表的调用。

s <- list()
f <- function(){
  s <<- c(s,list(sys.call()))
  g()
}
g <- function(){
  s <<- c(s,list(sys.call()))
  1
}

他们将以未知的顺序被调用。

f()
f()
g()
f()

除了 sys.call() 之外,我还应该记录哪些数据才能构建调用层次结构?
我想更改我当前的日志粒度。

sapply(s,deparse)
# [1] "f()" "g()" "f()" "g()" "g()" "f()" "g()"

类似于下面的内容。

#    sys.call call_id call_seq
#  :      f()       1        0
#  :      g()       1        1
#  :      f()       2        0
#  :      g()       2        1
#  :      g()       3        0
#  :      f()       4        0
#  :      g()       4        1

拥有如此精细的数据,我将能够重建调用层次结构。

谢谢

我能够管理那个过程。
在每次调用中,我都会测量调用链的递归深度。使用调用深度和调用顺序我计算了单个调用链。
解决问题的代码部分是

dt[, seq := depth( call_chain )
   ][, id := cumsum( seq==1L ) ]

完整案例this.