Добавление новых узлов в дерево с помощью 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
список таксонов.