Snakemake样本重命名报错:无法确定输入通配符'barcode'
问题原因
你遇到的WildcardError是因为Snakemake的依赖解析逻辑是从输出反向推导输入,但原规则里输入的{barcode}通配符和输出的{params.value}没有直接关联——Snakemake无法从输出的样本名反推出对应的条码,自然没法确定输入文件。
解决方案
通过创建反向字典,让Snakemake能从目标输出的样本名,反向找到对应的条码输入文件,就能解决通配符无法推导的问题。
修改后的完整Snakefile代码:
mydictionary = { 'BC01': 'bacteria_A', 'BC02': 'bacteria_B' } # 生成反向字典:用样本名查找对应的条码 rev_dictionary = {v: k for k, v in mydictionary.items()} rule all: input: expand('{bacteria}_trimmed.fastq.gz', bacteria=mydictionary.values()) rule changeName: input: # 利用通配符(样本名)从反向字典获取条码,动态生成输入文件名 lambda wildcards: f"{rev_dictionary[wildcards.bacteria]}_trimmed.fastq.gz" output: '{bacteria}_trimmed.fastq.gz' shell: "mv {input} {output}"
修改说明
- 反向字典
rev_dictionary:把原字典的键值对反转,实现从样本名到条码的映射,让Snakemake能明确每个输出文件对应的输入条码。 - 输入动态生成:用lambda函数结合通配符
wildcards.bacteria(即目标样本名),通过反向字典拼接出正确的输入条码文件名,让Snakemake能准确追踪依赖关系。 - 输出通配符对齐:输出直接使用
{bacteria}通配符,和rule all中的expand逻辑保持一致,确保任务触发路径清晰。
内容的提问来源于stack exchange,提问作者csug
相关产品推荐
相关产品推荐

