R调用堆栈详细检查

时间:2015-03-22 01:19:11

标签: r callstack magrittr

我正在寻找使用调用堆栈记录的正确方法 我有函数,它们将调用记录到列表中。

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

以这样的粒度获得数据我将能够重建调用的层次结构。

由于

1 个答案:

答案 0 :(得分:0)

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

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

完整案例this