如何使用存储在列表中的字符串使用 python 包 ete2 创建树?
How can I create a tree using the python package ete2 using strings stored in a list?
我正在尝试使用 python 包 ete2 从我的元胞自动机模型输出的合成数据制作系统发育树。数据由列为 (parent, child) 的对组成,其中每个成员都是代表突变事件的唯一整数。我已将这对中的每个成员重铸为字符串,并在它们前面加上 'r',所以现在:
('r1' ,'r2') 表示一个叫做 'r1' 的 parent 产生一个叫做 'r2' 的 child。所以输出文件看起来像:
[['r1' 'r2']
['r1' 'r3']
['r1' 'r4']
['r1' 'r5']
['r1' 'r6']
['r1' 'r7']
['r1' 'r8']
['r1' 'r9']
['r2' 'r10']
['r1' 'r11']
['r1' 'r12']
['r8' 'r13']
['r1' 'r14']
['r4' 'r15']
['r1' 'r16']
['r1' 'r17']
['r1' 'r18']
['r1' 'r19']]
我想遍历列表以使用 'add_child' 生成树,但不断出现错误。我当前的代码是:
t = Tree() # Creates an empty tree
r1 = t.add_child(name="r1")
for row in range(0, len(pairs_list)):
a = str(pairs_list[row,1])
b = str(pairs_list[row,0])
a = b.add_child(name = a)
我收到错误:
Traceback (most recent call last):
File "treetest.py", line 33, in <module>
a = b.add_child(name = a)
AttributeError: 'str' object has no attribute 'add_child'
如果我将代码最后一行中的 'b' 替换为 r1(或其他内容),它可以找到,但当然这并不代表数据...在此先感谢 universe .
像这样:
t = Tree() # Creates an empty tree
r1 = t.add_child(name="r1")
lookup = {"r1": r1}
def sort_pairs(pair):
# Extract integer after "r".
return int(pair[0][1:])
for pair in sorted(pairs_list, key=sort_pairs):
parentname = pair[0]
childname = pair[1]
if childname not in lookup:
if parentname in lookup:
# Add child.
newchild = lookup[parentname].add_child(name = childname)
lookup.add(childname, newchild)
else:
raise RuntimeError('Must not happen.')
我正在尝试使用 python 包 ete2 从我的元胞自动机模型输出的合成数据制作系统发育树。数据由列为 (parent, child) 的对组成,其中每个成员都是代表突变事件的唯一整数。我已将这对中的每个成员重铸为字符串,并在它们前面加上 'r',所以现在:
('r1' ,'r2') 表示一个叫做 'r1' 的 parent 产生一个叫做 'r2' 的 child。所以输出文件看起来像:
[['r1' 'r2']
['r1' 'r3']
['r1' 'r4']
['r1' 'r5']
['r1' 'r6']
['r1' 'r7']
['r1' 'r8']
['r1' 'r9']
['r2' 'r10']
['r1' 'r11']
['r1' 'r12']
['r8' 'r13']
['r1' 'r14']
['r4' 'r15']
['r1' 'r16']
['r1' 'r17']
['r1' 'r18']
['r1' 'r19']]
我想遍历列表以使用 'add_child' 生成树,但不断出现错误。我当前的代码是:
t = Tree() # Creates an empty tree
r1 = t.add_child(name="r1")
for row in range(0, len(pairs_list)):
a = str(pairs_list[row,1])
b = str(pairs_list[row,0])
a = b.add_child(name = a)
我收到错误:
Traceback (most recent call last):
File "treetest.py", line 33, in <module>
a = b.add_child(name = a)
AttributeError: 'str' object has no attribute 'add_child'
如果我将代码最后一行中的 'b' 替换为 r1(或其他内容),它可以找到,但当然这并不代表数据...在此先感谢 universe .
像这样:
t = Tree() # Creates an empty tree
r1 = t.add_child(name="r1")
lookup = {"r1": r1}
def sort_pairs(pair):
# Extract integer after "r".
return int(pair[0][1:])
for pair in sorted(pairs_list, key=sort_pairs):
parentname = pair[0]
childname = pair[1]
if childname not in lookup:
if parentname in lookup:
# Add child.
newchild = lookup[parentname].add_child(name = childname)
lookup.add(childname, newchild)
else:
raise RuntimeError('Must not happen.')