Как получить имя родительского узла в rpart? - PullRequest
0 голосов
/ 30 октября 2018

Привет. В настоящее время я пытаюсь извлечь некоторую информацию из родительского узла, хранящуюся в объекте вечеринки, например, ID. На данный момент я могу получить идентификаторы для терминальных узлов, используя:

 fit<-rpart(CommuteDistance ~.,data = Clients)
 pr<-as.party(fit)
 nodeids(pr,terminal=TRUE)

Но как я могу получить родительские идентификаторы? И если возможно, как я могу получить имена узлов?

1 Ответ

0 голосов
/ 31 октября 2018

Нет доступной функции, чтобы извлечь это удобно. Но нетрудно просто пройти рекурсивную структуру 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 и т. Д. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...