Как превратить узлы ctree в вектор?

Я объясню свою проблему на примере с таблицей радужной оболочки. Допустим, я хочу создать дерево между шириной чашелистика и видами. Для этого я буду использовать этот код:

ctree(Species~Sepal.Width,data=iris)->a
plot(a,type="simple")

Проблема в том, что, если я хочу создать фрейм данных, например, подсчитать количество наблюдений в каждом узле (от 0 до 2,9; от 2,9 до 3,3 и т. Д.), Единственный способ, который я нашел, - это создать новый вектор вручную, а затем с помощью dcast или же table функция.

Проблема с этим решением состоит в том, что, если бы у меня было большее дерево, это могло бы быть довольно сложно. Знаете ли вы другое решение для этого? Большое спасибо.

1 ответ

Собственно, партийная структура создана ctree эта информация хранится в нем Используя ваш пример, a[1]$fitted[,1] в каком листе оказалась каждая точка. Таким образом, вы можете получить количество точек на каждом листе с помощью:

table(a[1]$fitted[,1])
 3  4  5 
57 56 37 

Если вы пытаетесь увидеть правила, которые идут с листовыми номерами, вы можете использовать:

partykit:::.list.rules.party(a)
                                        3 
"Sepal.Width <= 3.3 & Sepal.Width <= 2.9" 
                                        4 
 "Sepal.Width <= 3.3 & Sepal.Width > 2.9" 
                                        5 
                      "Sepal.Width > 3.3"
Другие вопросы по тегам