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)