【问题标题】:dendrapply Error: C stack usage is too close to the limitdendrapply 错误:C 堆栈使用量太接近限制
【发布时间】:2017-10-01 22:46:52
【问题描述】:

我这样使用Rdendrapply

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

有什么想法吗?

【问题讨论】:

    标签: r apply dendrogram


    【解决方案1】:

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

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

    鉴于您的树状图的大小,这似乎最终会淹没控制台。创建每个节点的属性的平面(非嵌套)列表有点棘手,但一种方法是使用超赋值运算符&lt;&lt;- 在函数内修改函数的父框架中的变量:

    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)
    

    请注意,使用&lt;&lt;- 时应注意不要修改全局环境中的变量。请参阅this 帖子了解更多信息。

    【讨论】:

      猜你喜欢
      • 2018-05-09
      • 2021-01-12
      • 2020-05-04
      • 2021-02-17
      • 2013-05-28
      • 1970-01-01
      • 2020-08-12
      • 2022-01-03
      • 2017-12-26
      相关资源
      最近更新 更多