Нет доступной функции, чтобы извлечь это удобно. Но нетрудно просто пройти рекурсивную структуру partynode
и получить интересующие вас пользовательские величины. Это также помогает сначала преобразовать рекурсивный partynode
в плоский список.
В качестве воспроизводимого примера рассмотрим следующее дерево rpart
и его представление party
:
library("rpart")
fit <- rpart(Petal.Length ~ ., data = iris)
library("partykit")
pr <- as.party(fit)
После этого вы можете легко преобразовать в as.list(pr$node)
, который возвращает всю информацию из рекурсивной структуры partynode
. В частности, он содержит $id
каждого узла и $kids
ID (если есть). Таким образом, мы можем легко извлечь их с помощью sapply()
и пользовательской функции:
sapply(as.list(pr$node), function(n) {
if(is.null(n$kids)) c(n$id, NA, NA) else c(n$id, n$kids)
})
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
## [1,] 1 2 3 4 5 6 7 8 9
## [2,] 2 NA 4 5 NA NA 8 NA NA
## [3,] 3 NA 7 6 NA NA 9 NA NA
В первом столбце показано, что узел 1 имеет двух дочерних узлов, узлы 2 и 3. Узел 2 является терминальным узлом, поскольку у него нет дочерних узлов (второй столбец), в то время как у узла 3 снова есть два дочерних узла, узлы 4 и 7 и т. Д. .