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

Snakemake输出.bam的两条规则出现AmbiguousRuleException歧义错误求助

解决Snakemake规则歧义问题

问题原因

你的map和map_hybrid规则产生歧义,因为混合样本的输出文件名SRR14724459_SRR14724473__0.9.bam同时满足两个规则的输出通配符:

  • 对于map规则,它会把整个字符串匹配为{sample}通配符
  • 对于map_hybrid规则,它会拆分为{sample1}=SRR14724459、{sample2}=SRR14724473、{titration}=0.9(注意文件名里的双下划线大概率是笔误,应该调整为SRR14724459_SRR14724473_0.9.bam)

Snakemake无法自动判断应使用哪个规则,因此抛出AmbiguousRuleException。

解决方案

方案一:给通配符添加正则约束(推荐)

给map规则的sample通配符添加正则约束,明确它仅匹配不含下划线的单个样本名(你的单个样本名SRR14724459、SRR14724473都没有下划线,而混合样本名包含下划线,刚好可以区分)。

修改map规则的wildcard_constraints部分:

rule map:
    input:
        r1 = TRIMMED_DIR + "/{sample}/{sample}_R1_trimmed.fastq",
        r2 = TRIMMED_DIR + "/{sample}/{sample}_R2_trimmed.fastq"
    output:
        MAPPED_DIR + "/{sample}.bam"
    threads: 28
    params:
        genome = HUMAN_GENOME_DIR
    log:
        LOG_DIR + "/map/{sample}_map.log"
    benchmark:
        BENCHMARK_DIR + "/map/{sample}_bwa_benchmark.txt"
    wildcard_constraints:
        sample=r'[^_]+'  # 仅匹配不含下划线的字符串,限定为单个样本名
    shell:
        """
        bwa mem -t {threads} {params.genome} {input.r1} {input.r2} 2> {log} | samtools view -hSbo {output} -
        """

同时修正shell命令中的samtools参数错误:原命令samtools view -hSbo > {output}缺少输入源标识,需添加-表示从stdin读取。

方案二:修改混合样本输出文件名格式

给混合样本的输出文件添加唯一标识(比如_hybrid后缀),让它和单个样本的输出完全区分:

修改map_hybrid的输出:

rule map_hybrid:
    # 其他部分保持不变
    output:
        MAPPED_DIR + "/{sample1}_{sample2}_{titration}_hybrid.bam"
    # 其他部分保持不变

同时修正rule all中的expand语句(原代码里的list_a_titrations等变量未定义,需替换为已定义的sample1、sample2、titration):

rule all:
    expand(MAPPED_DIR + "/{sample}.bam", sample=all_samples),
    expand(MAPPED_DIR + "/{sample1}_{sample2}_{titration}_hybrid.bam", zip, sample1=sample1, sample2=sample2, titration=titration)   

方案三:指定规则优先级(临时方案)

在Snakefile开头添加规则优先级声明,当出现歧义时优先使用map_hybrid:

ruleorder: map_hybrid > map

这种方法无需修改文件名或通配符,但如果后续出现其他类似命名的文件,仍可能触发歧义,仅作为临时应急方案。

额外注意事项

  1. 原rule all中的list_a_titrations、list_b_titrations、tit_list变量未定义,需替换为已定义的sample1、sample2、titration,否则会抛出变量未找到的错误。
  2. 混合样本文件名中的双下划线__是异常格式,建议调整为单个下划线_,确保和map_hybrid规则的输出通配符完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:25:22