dendrapply错误:C堆栈使用率太接近极限

时间:2017-05-03 22:58:03

标签: r apply dendrogram

我以这种方式使用R' dendrapply

dendrapply(dendro, function(n) utils::str(attributes(n)))

其中dendro'dendrogram' with 2 branches and 5902 members total, at height 2

经过一段时间后,它运行崩溃并出现此错误:

Error: C stack usage  7971524 is too close to the limit

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

看起来你有一个无限的递归情况,因为你的函数中没有返回节点。如果您只是想将每个节点的属性结构打印到控制台,请在函数中返回n,如下所示:

print_attrs <- function(n){
  utils::str(attributes(n))
  return(n)
}
dendrapply(dendro, print_attrs)

考虑到你的树形图的大小,似乎这可能最终充斥着控制台。要创建每个节点的属性的平面(非嵌套)列表有点棘手,但一种方法是使用超级对齐运算符<<-来修改函数内函数的父框架中的变量:

list_attrs <- function(x){
  out <- vector(mode = "list", length = attr(x, "members"))
  counter <- 1
  get_node_attrs <- function(n){
    out[[counter]] <<- attributes(n)
    counter <<- counter + 1
    return(n)
  }
  tmp <- dendrapply(x, get_node_attrs)
  return(out)
}
myattributes <- list_attrs(dendro)

请注意,在使用<<-不要修改全局环境中的变量时应该小心。有关详细信息,请参阅this帖子。