Добавление новых узлов в дерево с помощью dendroPy

Я хотел бы создать дерево путем динамического добавления узлов в уже существующее дерево в DendroPy. Итак, вот как я продолжаю,

>>> t1 = dendropy.Tree(stream=StringIO("(8,3)"),schema="newick")

Теперь это создает небольшое дерево с двумя дочерними элементами, имеющими метки таксонов 8 и 3. Теперь я хочу добавить новый лист к узлу с меткой таксона 3. Для этого мне нужен объект узла.

>>> cp = t1.find_node_with_taxon_label('3')

Я хочу использовать функцию add child в этой точке, которая является атрибутом узла.

>>> n = dendropy.Node(taxon='5',label='5')  
>>> cp.add_child(n)

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

Теперь, если мы напечатаем t1, мы увидим дерево. Но даже после добавления элементов я не смог найти добавленные объекты. Например, если мы делаем

>>> cp1 = t1.find_node_with_taxon_label('5')

Он не возвращает объект, связанный с 5.

1 ответ

Решение

Чтобы добавить таксон, вы должны явно создать и добавить его в дерево:

t1 = dendropy.Tree(stream=StringIO("(8,3)"),schema="newick")

# Explicitly create and add the taxon to the taxon set
taxon_1 = dendropy.Taxon(label="5")
t1.taxon_set.add_taxon(taxon_1)

# Create a new node and assign a taxon OBJECT to it (not a label)
n = dendropy.Node(taxon=taxon_1, label='5')

# Now this works
print t1.find_node_with_taxon_label("5")

Ключ в том, что find_node_with_taxon_label искать в t1.taxon_set список таксонов.

Другие вопросы по тегам