You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snakemake中如何求glob_wildcards生成集合的并集

解决Snakemake中合并fastq与组装序列样本集合的问题

嘿,我知道你为啥用union()不行了——Snakemake自带的那个union()函数根本不是用来合并Python集合的,它是给规则里的输入输出通配符扩展用的!而你已经把FASTQ和GENOMES转成了Python原生的set类型,直接用Python集合的合并方法就搞定了。

两种可行的写法

你可以二选一来合并这两个集合:

  1. 用Python集合自带的union()方法:
SAMPLES = FASTQ.union(GENOMES)
  1. 用更简洁的集合运算符|(管道符),效果和上面完全一致:
SAMPLES = FASTQ | GENOMES

完整的修改后代码

把你的代码改成这样就可以正常运行了:

# 替换成你实际的文件路径
unzip_res = "path/to/your/unzipped_fastqs/"
renaming_res = "path/to/your/assembled_genomes/"

# 获取fastq样本集合
FASTQ, = glob_wildcards(unzip_res + "{fastq}_R1.fastq")
FASTQ = set(FASTQ)

# 获取组装序列样本集合
GENOMES, = glob_wildcards(renaming_res + "{genomes}.fasta")
GENOMES = set(GENOMES)

# 合并得到所有样本集合
SAMPLES = FASTQ | GENOMES  # 或者用 FASTQ.union(GENOMES)

额外小技巧

如果需要样本列表是有序的(方便后续规则执行更稳定),可以把结果转成排序后的列表:

SAMPLES = sorted(FASTQ | GENOMES)

再补充一句:Snakemake的union()函数是用来处理规则中的通配符模式的,比如你在规则输入里写input: union("data/{sample}_R1.fq", "refs/{sample}.fasta"),它会把两种通配符匹配到的结果合并,但这和你手里的Python集合完全是两码事哦~

内容的提问来源于stack exchange,提问作者JoergL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 09:47:36