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

Snakemake将通配符列表整体作为输入的问题解决求助

问题修复方案

你遇到的核心问题是Snakemake将通配符对应的样本列表直接拼接成了文件名,而非逐个处理列表中的样本。以下是具体修复方法:

1. 排查错误根源

错误通常出现在两个环节:

  • rule all中未用expand()生成每个样本的独立目标路径,直接使用了样本列表变量
  • 规则的输入/输出路径中误用了包含多个值的列表作为通配符

2. 正确实现方式

场景1:手动定义样本列表

# 定义单个样本的列表
SAMPLES = ["24_mil", "24_mil2"]

rule all:
    input:
        # 用expand()遍历样本列表,生成每个样本的输出路径
        expand("output/{sample}.bam", sample=SAMPLES)

rule process_fastq:
    # 通配符{sample}对应单个样本,而非整个列表
    input:
        "input/{sample}.fastq"
    output:
        "output/{sample}.bam"
    shell:
        # 替换为你的实际处理命令
        "your_process_command {input} {output}"

场景2:自动匹配输入文件

如果需要从input目录自动获取所有fastq样本,使用glob_wildcards配合expand:

# 自动提取input目录下的样本名
samples, = glob_wildcards("input/{sample}.fastq")

rule all:
    input:
        expand("output/{sample}.processed.fastq", sample=samples)

rule process_fastq:
    input:
        fastq="input/{sample}.fastq"
    output:
        processed="output/{sample}.processed.fastq"
    shell:
        "fastp -i {input.fastq} -o {output.processed}"

关键注意事项

  • 确保rule all的输入是多个独立文件路径,而非包含列表的单个路径
  • 规则中的通配符(如{sample})必须对应单个样本值,Snakemake会自动为每个样本实例化独立任务
  • 避免将列表变量直接写入路径字符串,必须用expand()完成遍历替换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 06:42:11