如何在R中走上一棵树?

时间:2012-01-10 00:27:00

标签: r

我在教自己R,好吧,更喜欢在里面玩耍; Binary Tree包具体。在我得到该页面上的示例后,我想我会尝试将树从终端节点向上移动到父节点。这个特殊的包似乎没有一个getParent()函数/方法(我可以辨别),它会做我想做的事。

所以我认为我应该将树转换为其他对象:图形,文本字符串数组,无论如何,但我似乎没有足够好的google-fu来找到我正在寻找的东西。我仍然试图找到文档的方法。

那么,在网页上给出的示例中,如何知道自己正在做什么的人会如何走向树?

1 个答案:

答案 0 :(得分:3)

嗯,这是一个遍历树的函数,并将父节点添加到每个节点。

addParent <- function(n, parent = NULL) {
  n$parent <- parent
  if (!n$terminal) {
      n$left <- Recall(n$left, n)
      n$right <- Recall(n$right, n)
  }
  n
}

# Example usage
airq <- subset(airquality, !is.na(Ozone))
airct <- ctree(Ozone ~ ., data = airq,   
                 controls = ctree_control(maxsurrogate = 3))
airct@tree <- addParent(airct@tree)
leaves <- nodes(airct, unique(where(airct)))
leaves[[1]]        # node 5
leaves[[1]]$parent # node 4

# And here's a way to "walk up the tree"
walkUp <- function(n) {
  cat("Node", n$nodeID, "\n")
  n <- n$parent
  if(!is.null(n)) Recall(n)
}

for(n in leaves) { cat("---\n"); walkUp(n) }
顺便说一句,我觉得我宁愿爬上一棵树而不是走上它; - )