Snakemake expand() 仅适用于列表的第一个元素
Snakemake expand() only applies on the first element of a list
我正在尝试扩展两组具有相似名称结构的文件,只有一个比另一个长。
x=expand(
[
"results/qc/{u.sample}.foo.txt",
"results/qc/{u.sample}.foo.bar.txt",
],
u=samples.itertuples()
)
print(x)
结果为:
['results/qc/A.foo.txt', 'results/qc/B.foo.txt', 'results/qc/C.foo.txt']
只有第一个展开,如果它是 { }
中的通配符,我可以理解这种行为。但是官方 Snakemake 文档中的 this 表明它不是。
samples
是一个包含 3 个值的 1 列 pandas 数据框:A、B、C。
如有任何帮助,我们将不胜感激。
我没有查看源代码,我的猜测是对于要插入变量的每个文件名,它都会再次循环变量中的每个元素。所以 itertuples()
returns 一个迭代器,对于第一个文件名 {u.sample}.foo.txt
迭代器已经结束,然后对于下一个文件名 {u.sample}.foo.bar.txt
迭代器中没有剩余元素。一个简单的解决方案是将迭代器中的所有元素提取为列表
x=expand(
[
"results/qc/{u.sample}.foo.txt",
"results/qc/{u.sample}.foo.bar.txt",
],
u=list(samples.itertuples())
)
print(x)
我正在尝试扩展两组具有相似名称结构的文件,只有一个比另一个长。
x=expand(
[
"results/qc/{u.sample}.foo.txt",
"results/qc/{u.sample}.foo.bar.txt",
],
u=samples.itertuples()
)
print(x)
结果为:
['results/qc/A.foo.txt', 'results/qc/B.foo.txt', 'results/qc/C.foo.txt']
只有第一个展开,如果它是 { }
中的通配符,我可以理解这种行为。但是官方 Snakemake 文档中的 this 表明它不是。
samples
是一个包含 3 个值的 1 列 pandas 数据框:A、B、C。
如有任何帮助,我们将不胜感激。
我没有查看源代码,我的猜测是对于要插入变量的每个文件名,它都会再次循环变量中的每个元素。所以 itertuples()
returns 一个迭代器,对于第一个文件名 {u.sample}.foo.txt
迭代器已经结束,然后对于下一个文件名 {u.sample}.foo.bar.txt
迭代器中没有剩余元素。一个简单的解决方案是将迭代器中的所有元素提取为列表
x=expand(
[
"results/qc/{u.sample}.foo.txt",
"results/qc/{u.sample}.foo.bar.txt",
],
u=list(samples.itertuples())
)
print(x)