当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R dendrapply 将函数应用于树状图的所有节点


R语言 dendrapply 位于 stats 包(package)。

说明

将函数 FUN 递归地应用于 dendrogram 的每个节点。当 y <- dendrapply(x, fn) 时,y 是与 x 具有相同图结构的树状图,并且对于每个节点,y.node[j] <- FUN( x.node[j], ...) (其中 y.node[j] 是 y 的 j-th 节点的(无效!)符号) 。

用法

dendrapply(X, FUN, ...)

参数

X

"dendrogram" 的对象。

FUN

一个R应用于每个树状图节点的函数,通常作用于其attributes单独返回同一节点的更改版本。

...

传递给 FUN 的潜在进一步参数。

通常是与 X 具有相同(图)结构的树状图。为此,该函数在概念上必须采用 FUN <- function(X) { attributes(X) <- .....; X } 形式,即返回添加或更改了某些属性的节点。

注意

该实现在某种程度上是实验性的,非常欢迎增强函数的建议(或很好的使用示例)。当前的实现是递归的,对于具有许多非叶的树状图来说效率低下。请参阅 dendrogram 中的“警告”。

例子

require(graphics)

## a smallish simple dendrogram
dhc <- as.dendrogram(hc <- hclust(dist(USArrests), "ave"))
(dhc21 <- dhc[[2]][[1]])

## too simple:
dendrapply(dhc21, function(n) utils::str(attributes(n)))

## toy example to set colored leaf labels :
local({
  colLab <<- function(n) {
      if(is.leaf(n)) {
        a <- attributes(n)
        i <<- i+1
        attr(n, "nodePar") <-
            c(a$nodePar, list(lab.col = mycols[i], lab.font = i%%3))
      }
      n
  }
  mycols <- grDevices::rainbow(attr(dhc21,"members"))
  i <- 0
 })
dL <- dendrapply(dhc21, colLab)
op <- par(mfrow = 2:1)
 plot(dhc21)
 plot(dL) ## --> colored labels!
par(op)

作者

Martin Maechler

也可以看看

as.dendrogramlapply 用于将函数应用于 list 的每个组件, rapply 用于对嵌套列表的每个非列表组件执行此操作。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Apply a Function to All Nodes of a Dendrogram。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。