gpt4 book ai didi

python - 如何使用Snakemake中的expand函数对列表进行排列或组合

转载 作者:行者123 更新时间:2023-12-04 15:20:17 32 4
gpt4 key购买 nike

可能是 Snakemake 中的一个非常基本的问题,但到目前为止我找不到答案。假设我有一份 sample list

SAMPLES = ["A", "B", "C"]

一个典型的 expand 命令看起来像:

expand("{sample}.txt", sample=SAMPLES)

但我想获得相同样本列表的组合(甚至排列)。

正在做:

expand("{sample}-{sample}.txt", sample=SAMPLES)

给你

 A-A.txt, A-B.txt, A-C.txt, B-A.txt, B-B.txt, B-C.txt, C-A.txt, C-B.txt, C-C.txt

相反,我想要:

A-B.txt, A-C.txt, B-C.txt

expand function 的 Snakemake 文档中他们说:

“默认情况下,expand 使用 python itertools 函数 product 生成所提供的通配符值的所有组合。但是,通过插入第二个位置参数,可以将其替换为任何组合函数,例如 压缩"

但是,我不能只用 itertools.combinations 替换 product功能,因为据我所知 source code of expand ,您不能将 r(输出元组的长度)参数提供给 expand。做

import itertools
expand("{sample}-{sample}.txt", itertools.combinations, sample=SAMPLES)

返回'list' object cannot be interpreted as an integer 错误。但它适用于 itertools.product

我想我可以在调用 expand 之前使用 itertools.combinations 在规则之外创建两个列表,但我希望 Snakemake 社区提供一种优雅的方法。

谢谢!

最佳答案

也许它可以在 expand 中完成,但我认为没有它会更容易生成感兴趣的列表。例如:

SAMPLES = ["A", "B", "C"]

combs = []
for x in itertools.combinations(SAMPLES, 2):
combs.append('%s-%s.txt' %(x[0], x[1]))

print(combs)
['A-B.txt', 'A-C.txt', 'B-C.txt']

现在,在您本应使用expand(...) 的地方使用combs。考虑到 expand 只是一个返回列表的便捷函数,但您不一定非要使用它

关于python - 如何使用Snakemake中的expand函数对列表进行排列或组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63450853/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com