2013-03-27 3 views
2

Кто-нибудь знает, есть ли пакет или простой способ в R для создания древовидных структур следующего вида:Создание дерева нарезки в R

enter image description here

Я не искал способ, чтобы создать хороший сюжет, как и выше. Моя самая большая проблема - найти способ работать с таким деревом, где есть четкое различие между узлами, листьями и дочерними узлами. Например, я хотел бы иметь возможность переключаться на два листа, настраивая строку или вектор. Поэтому я предполагаю, что это в основном проблема хранения данных.

Я искал довольно давно и наткнулся на пакет под названием «Дендрограмма». Проблема с этим пакетом заключается в том, что (насколько я знаю) он не позволяет маркировать внутренние узлы, такие как «H'and» V. Только конечные листья могут нести значение или строку.

Другой пакет, который я нашел, является «rpart», но я думаю, что они полезны только для деревьев регрессии.

Если кто-нибудь знает что-то, я был бы очень признателен за помощь!

+1

Привет, я должен добавить, что, поскольку вы новичок здесь, вы можете прочитать [** о **] (http://stackoverflow.com/about) и [** faq **] (http://stackoverflow.com/faq) о том, как работает SO. StackOverflow сделан ** намного более ценным для всех, если, когда вы получаете ответ, который решает вашу проблему, вы принимаете его, нажимая маленькую галочку. У вас нет абсолютно никаких обязательств **, но это отличный способ «вернуть» сайту, если ответ действительно решит вашу проблему. –

ответ

1

Если у вас есть edgelist вы можете сделать что-то очень напоминает формат с с igraph:

el <- matrix(c("H" , "V" , "H" , "V2" , "V" , "1" , "V" , "V3" , "V3" , "3" , "V3" , "4" , "V2" , "2" , "V2" , "H2") , ncol = 2 , byrow = TRUE) 
g <- graph.edgelist(el , directed = TRUE) 
V(g)$label <- get.vertex.attribute(g, 'name') 
plot(g,layout=layout.reingold.tilford) 

Вы можете также назвать вам узлы в el команды как буквы, а затем использовать get.vertex.attribute(g, 'name'), чтобы увидеть, что полученные узлы называются , а затем передать любой вектор символов, который вам нравится, чтобы получить ваши метки, как они есть на картинке. enter image description here

+1

Можете ли вы загрузить в Интернет и вставить ссылку на то, что Вы получаете? (Я понимаю, что у вас еще нет репутации, чтобы включить фото). Попробуйте использовать [imgur.com] (http://imgur.com/). Вы вообще получаете сообщения об ошибках? Можете ли вы также вставить выходные данные из 'sessionInfo()' в свой блок кода в свой вопрос, тогда мы можем попытаться выяснить, почему это другое. –

+0

Спасибо за быстрый ответ, это выглядит очень многообещающе! У меня есть одна проблема. Когда я просто копирую код, который вы указали выше, R создает график, который выглядит совсем по-другому. Установка атрибута direct = FALSE немного улучшает график, но все равно много: http://s22.postimg.org/uwzzrggj5/Trees.png Согласно сайту igraph, макет Reingold Tilford должен делать трюк, но по какой-то причине он не создает график сверху вниз правильным образом. – Arno

+0

SessionInfo() дает следующий результат: R версии 2.13.2 (2011-09-30) Платформа: x86_64-рс-mingw32/64 (64-битный) локали: [1] LC_COLLATE = Dutch_Netherlands.1252 LC_CTYPE = Dutch_Netherlands.1252 [3] LC_MONETARY = Dutch_Netherlands.1252 LC_NUMERIC = C [5] LC_TIME = Dutch_Netherlands.1252 присоединенные базовые пакеты: [1] Статистика графики grDevices Utils наборы данных базовые методы другие присоединенные пакеты: [1] igraph_0.6.5-1 – Arno

1

Да, rpart может не соответствовать вашим потребностям. Попробуйте phylobase пакет.

Если ваше дерево может быть прочитано из файла, то вы, вероятно, можете использовать какой-то синтаксический анализатор дерева XML, например this.

 Смежные вопросы

  • Нет связанных вопросов^_^