我在教自己R,好吧,更喜欢在里面玩耍; Binary Tree包具体。在我得到该页面上的示例后,我想我会尝试将树从终端节点向上移动到父节点。这个特殊的包似乎没有一个getParent()函数/方法(我可以辨别),它会做我想做的事。
所以我认为我应该将树转换为其他对象:图形,文本字符串数组,无论如何,但我似乎没有足够好的google-fu来找到我正在寻找的东西。我仍然试图找到文档的方法。
那么,在网页上给出的示例中,如何知道自己正在做什么的人会如何走向树?
答案 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) }
顺便说一句,我觉得我宁愿爬上一棵树而不是走上它; - )