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

Snakemake多文件夹结果合并报错求助:MissingInputException

问题解决方案

核心问题分析

你的代码存在两个关键问题:

  • 输入输出路径脱节:rule program_on_single_folder的输出是{folder}/program_result目录,但rule all中声明的single_folder_results指向test/{folder}/result_folder/quality_report.tsv,两者路径完全不匹配,导致Snakemake无法关联规则,找不到所需的输入文件。
  • 规则依赖逻辑错误:results_collate直接引用rules.all.input.single_folder_results作为输入,这是Snakemake的目标集合而非实际生成的文件,且没有任何规则负责生成这些quality_report.tsv文件。

修正后的代码

# 先定义你的文件夹列表,示例:
dirs_list = ["dirA", "dirB", "dirC"]
n_threads = 4

rule all:
    input: 
        # 确保路径和program_on_single_folder的输出完全一致
        expand("test/{folder}/program_result/quality_report.tsv", folder=dirs_list),
        "result_total.tsv"

rule program_on_single_folder:
    input: 
        # 若{file}是通配符,需补充明确的文件名规则,比如指定固定文件名或用expand
        genome = "test/{folder}/genome.fasta"
    output:
        # 明确指定程序生成的具体文件,这是Snakemake追踪的核心
        report = "test/{folder}/program_result/quality_report.tsv",
        # 可选:确保输出目录存在(若程序不会自动创建)
        outdir = directory("test/{folder}/program_result")
    threads: n_threads
    shell:
        """
        # 替换为你的实际命令,确保输出到指定路径
        your_program --input {input.genome} --output-dir {output.outdir}
        """

rule results_collate:
    input:
        # 直接生成所有待合并的文件列表,和rule all中的路径对齐
        all_results = expand("test/{folder}/program_result/quality_report.tsv", folder=dirs_list)
    output:
        "result_total.tsv"
    shell:
        # 用>而非>>避免重复追加内容,按需保留uniq去重
        "cat {input.all_results} | uniq > {output}"

关键修改点说明

  1. 统一路径规则:让rule all和program_on_single_folder的文件路径完全一致,让Snakemake能明确每个quality_report.tsv是由program_on_single_folder生成的。
  2. 明确输出文件:在program_on_single_folder中直接声明程序生成的quality_report.tsv作为输出——Snakemake是基于文件的工作流,必须追踪具体文件的生成状态,仅声明目录无法建立有效依赖。
  3. 修正合并规则输入:在results_collate中直接用expand生成输入文件列表,而非引用rules.all.input,避免依赖链混乱。
  4. 修复shell命令:将>>改为>,防止每次运行时重复追加内容;不需要去重可直接去掉| uniq。

额外注意事项

  • 如果{file}是通配符,需补充wildcard_constraints或用expand明确输入文件,比如genome=expand("test/{folder}/{file}", folder=dirs_list, file=["genome.fasta"]),否则Snakemake无法解析该通配符。
  • 若程序不会自动创建输出目录,保留directory输出项可让Snakemake自动创建目录(需Snakemake版本≥5.10)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:17:19