如何解决使用partykit中的ctree获取每个终端节点从叶到根的完整路径
我当前正在从R包“ partykit”中使用ctree,我想知道是否有一种方法可以获取从终端节点到根的完整路径。 我希望每片叶子都有到根的完整路径,表示为包含节点ID的向量。
library(partykit)
ct <- ctree(Species ~ .,data = iris)
Model formula:
Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
Fitted party:
[1] root
| [2] Petal.Length <= 1.9: setosa (n = 50,err = 0.0%)
| [3] Petal.Length > 1.9
| | [4] Petal.Width <= 1.7
| | | [5] Petal.Length <= 4.8: versicolor (n = 46,err = 2.2%)
| | | [6] Petal.Length > 4.8: versicolor (n = 8,err = 50.0%)
| | [7] Petal.Width > 1.7: virginica (n = 46,err = 2.2%)
Number of inner nodes: 3
Number of terminal nodes: 4
这基本上就是我所需要的:
[[1]]
[1] 2 1
[[2]]
[1] 5 4 3 1
[[3]]
[1] 6 4 3 1
[[4]]
[1] 7 3 1
我将不胜感激! 谢谢!
解决方法
以下功能可以解决问题。第一行提取每个节点的孩子列表,然后您可以递归地遍历所有节点。
get_path <- function(object) {
## list of kids per node (NULL if terminal)
kids <- lapply(as.list(object$node),"[[","kids")
## recursively add node IDs of children
add_ids <- function(x) {
ki <- kids[[x[1L]]]
if(is.null(ki)) {
return(list(x))
} else {
x <- lapply(ki,"c",x)
return(do.call("c",lapply(x,add_ids)))
}
}
add_ids(1L)
}
然后可以将其应用于任何party
对象:
get_path(ct)
## [[1]]
## [1] 2 1
##
## [[2]]
## [1] 5 4 3 1
##
## [[3]]
## [1] 6 4 3 1
##
## [[4]]
## [1] 7 3 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。