我以这种方式使用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
有什么想法吗?
答案 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帖子。