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

Snakemake宏基因组分析读取样本目录fastq文件出现WildcardError求助

报错原因

你触发的WildcardError核心问题是:你把和样本绑定的R1/R2文件名当成了Snakemake的通配符使用,而规则的输出文件名里没有包含R1、R2通配符,Snakemake无法建立输出到输入的对应关系。

修复步骤

  1. 将样本元数据转为字典映射:原来直接读取的R1、R2是全局列表,无法和单个样本对应,需要转为以样本名为索引的键值对,方便根据样本名匹配对应的读段文件名。
  2. 使用输入函数获取对应读段文件:在规则的input块中通过lambda函数,根据当前匹配的sample通配符,从字典中取出对应的R1/R2文件名,避免将R1/R2设为通配符。
  3. 修正shell命令的参数错误:你原代码中trimmomatic、kraken2的shell命令重复写入了{input}占位符,会导致参数错误,同步修正。

修改后完整Snakefile代码

# 提取样本表信息,建立样本与读段文件的映射
import pandas as pd
import os
df = pd.read_csv("sample_table_test.csv")
# 转为以样本名为key的字典
sample2r1 = dict(zip(df.library, df.r1_file))
sample2r2 = dict(zip(df.library, df.r2_file))
samples = df.library.to_list()
print("Samples being processed:", samples)


rule all:
    input:
        expand("{sample}.bracken", sample=samples),
        

# Trimmomatic修剪双端读段
rule trim_reads:
    input:
        r1 = lambda wildcards: f"{wildcards.sample}/{sample2r1[wildcards.sample]}",
        r2 = lambda wildcards: f"{wildcards.sample}/{sample2r2[wildcards.sample]}",
    output:
        r1_trim = "{sample}/r1_trim_paired.fq.gz",
        r2_trim = "{sample}/r2_trim_paired.fq.gz",
    conda:
        "env.yaml",
    threads: 8
    shell:
        "trimmomatic PE -threads {threads} {input.r1} {input.r2} {output.r1_trim} {output.r1_trim}.unpaired {output.r2_trim} {output.r2_trim}.unpaired SLIDINGWINDOW:4:30 LEADING:2 TRAILING:2 MINLEN:50"

# Kraken2分类注释
rule kraken2:
    input:
        r1_trim = "{sample}/r1_trim_paired.fq.gz",
        r2_trim = "{sample}/r2_trim_paired.fq.gz",
    output:
        report = "{sample}_report.txt",
        classified = "{sample}_kraken_cseqs#.fq",
    conda:
        "env.yaml",
    threads: 1
    shell:
        "kraken2 --gzip-compressed --paired --classified-out {output.classified} --db database/minikraken2_v1_8GB/ --report {output.report} --threads {threads} {input.r1_trim} {input.r2_trim}"

# Bracken丰度估计
rule bracken:
    input:
        report = "{sample}_report.txt",
    output:
        "{sample}.bracken",
    conda:
        "env.yaml",
    shell:
        "bracken -d database/minikraken2_v1_8GB/ -i {input.report} -o {output} -r 150"

其他注意点

  • 我把修剪后的输出文件名统一改成了固定的r1_trim_paired.fq.gz、r2_trim_paired.fq.gz,不需要再保留原始文件名的后缀,避免后续规则不必要的依赖关联
  • 线程数单独提出来放到threads字段,更符合Snakemake的规范,方便后续资源调度
  • 原代码中trimmomatic的输出参数错误已经修正,示例里会自动丢弃未配对的读段,如果你需要保留可以新增对应的输出字段配置即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 07:45:04