使用Paramspace出现MissingInputException,参数已正确展开仍报错
Snakemake Paramspace 无法关联规则输入输出的问题修复
问题背景
使用Paramspace管理QC参数时,运行snakemake -np出现MissingInputException,Snakemake无法识别filter_snp_stats规则应生成目标文件,报错路径如下:
Missing input files for rule all: affected files: /mnt/storage/project/project_folder/snp-stats/post-qc/hwe_p~1e-06/info~0.99/by_chr/data.chr22.snp-stats ...
核心问题
Paramspace生成的路径结构与规则输出的通配符格式不匹配,加上路径前缀TEMP_DIR可能未正确应用,导致Snakemake无法建立输入输出的关联。
修复方案
方案一:统一Paramspace的参数分隔符
默认情况下,Paramspace.instance_patterns用路径分隔符/拆分参数为嵌套目录(如hwe_p~1e-06/info~0.8),但filter_snp_stats规则中的{paramspace.wildcard_pattern}是用下划线_连接的单个通配符(如hwe_p~1e-06_info~0.8),两者结构冲突。
修改主Snakefile中的Paramspace初始化代码,指定分隔符为下划线:
paramspace = Paramspace( pd.read_csv("config/qc_values.tsv", sep="\t"), sep="_" # 让参数用下划线连接,而非路径分隔符 )
修改后,rule all生成的路径与filter_snp_stats的输出路径格式完全一致,Snakemake可正确关联。
方案二:改用显式参数通配符(保留嵌套目录)
若需要保留嵌套目录结构,可修改filter_snp_stats规则,用显式通配符对应每个QC参数:
rule filter_snp_stats: input: f"{TEMP_DIR}/snp-stats/pre-qc/by_chr/data.chr{{chr}}.snp-stats" output: # 用显式通配符匹配每个参数的路径片段 f"{TEMP_DIR}/snp-stats/post-qc/hwe_p~{{hwe_p}}/info~{{info}}/by_chr/data.chr{{chr}}.snp-stats", params: # 直接从通配符提取参数值 hwe_p=lambda wildcards: wildcards.hwe_p, info=lambda wildcards: wildcards.info script: "../scripts/filter_snpstats.R"
此方案无需修改rule all的instance_patterns,Snakemake会通过hwe_p和info两个通配符匹配目标路径。
额外检查:确保路径前缀TEMP_DIR生效
- 确认主Snakefile中
TEMP_DIR = "temp"的定义在include: rules/rules.smk之前,保证rules.smk能访问该变量。 - 运行snakemake时避免用
--config参数覆盖TEMP_DIR的值。
验证
修改后执行snakemake -np,若DAG成功生成,说明修复生效。
内容的提问来源于stack exchange,提问作者Giulio Centorame
相关产品推荐
相关产品推荐

