Как получить детей дерева txt в формате partykit

Если вы запустите следующее:

library(RWeka) 
data(iris) 
res = J48(Species ~., data = iris)

вы получите следующее дерево:

R> res
J48 pruned tree
------------------

Petal.Width <= 0.6: setosa (50.0)
Petal.Width > 0.6
|   Petal.Width <= 1.7
|   |   Petal.Length <= 4.9: versicolor (48.0/1.0)
|   |   Petal.Length > 4.9
|   |   |   Petal.Width <= 1.5: virginica (3.0)
|   |   |   Petal.Width > 1.5: versicolor (3.0/1.0)
|   Petal.Width > 1.7: virginica (46.0/1.0)

Number of Leaves  :     5

Size of the tree :  9

Теперь скопируйте и вставьте его в текстовый файл и сохраните — это мой входной файл. Я хотел бы получить список каждого узла (отца) и его дочерних элементов дерева (это только пример) в формате, как если бы я запускал это дерево в R и использовал as.party. (помните, что я не могу его использовать, так как это только формат txt). Я хотел бы получить список узлов и их детей так же, как если бы использовал x$kids в пакете partykit. Как мне это сделать?


person Avi    schedule 26.09.2015    source источник


Ответы (1)


В принципе, это возможно, но это может привести к ошибкам. И даже если он заработает, он не будет содержать всю информацию, которую содержит as.party(res). Например, здесь нельзя вывести некоторые переменные из исходных данных (Sepal.Length и Sepal.Width). Точно так же возможно, что не все уровни отклика могут быть выведены в случае, когда некоторый уровень не является наиболее частым уровнем ни в одном из конечных узлов. Частоты, связанные со всеми уровнями отклика во всех конечных узлах, также, вероятно, не поддаются полной реконструкции.

Вкратце: пакет partykit избегает синтаксического анализа простого текста при принуждении деревьев из других пакетов, потому что результаты могут быть неправильными/неполными. Преобразование объектов (вернее их текстовое представление) работает надежно.

person Achim Zeileis    schedule 26.09.2015
comment
Ахим, Большое спасибо. Не могли бы вы показать, как я могу сделать это из txt файла? - person Avi; 27.09.2015
comment
Нет, извините, как объяснялось выше: в общем случае это не сработает, поэтому я не думаю, что стоит тратить на это время. Если вы хотите это сделать, вам придется readLines файл, а затем использовать обычные функции обработки текста для разбора: grep, gsub, strsplit, paste и т. д. - person Achim Zeileis; 27.09.2015