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

Snakemake运行TRF流程报wildcard 'ID,\d+'未赋值错误排查

问题根因

报错由两处代码错误共同导致:

  • 核心逻辑错误:全局变量TRFBED的定义错误保留了{ID}通配符。trf_bed规则的作用是聚合所有拆分片段的TRF计算结果,输出单个合并后的BED文件,不需要按拆分ID生成多个输出文件。当前写法让Snakemake误以为该规则需要为每个ID生成独立BED,但你既没有为该规则的ID通配符配置取值来源,还在输入中通过expand拉取了所有ID对应的dat文件,逻辑直接冲突。
  • 语法写法问题:wildcard_constraints块的键值对末尾多余的尾逗号,会导致部分版本Snakemake解析时把通配符名和约束正则错误拼接,最终出现报错信息里异常的通配符名ID,\\d+。另外你在expand调用中传入了多余的SM=SM参数——FASTA_FMT通过f-string已经把SM的固定值直接拼接进了路径字符串,路径中根本不存在{SM}通配符,该参数属于无效写法。
修复步骤
  1. 修改TRFBED定义,移除多余的{ID}通配符,改为固定的单文件输出路径:
    将原代码:
TRFBED = os.path.abspath(f"{SM}_{{ID}}.trf.bed")

替换为:

TRFBED = os.path.abspath(f"{SM}.trf.bed")
  1. 修正wildcard_constraints块,删除多余的尾逗号和无用的SM通配符约束(SM已经作为固定值拼接进路径,不需要作为通配符存在):
    将原代码:
wildcard_constraints:
    SM="|".join(SMS),
    ID="\d+",

替换为:

wildcard_constraints:
    ID="\d+"
  1. 修正trf_bed规则中的expand调用,删除多余的SM参数:
    将原代码:
dats = expand(rules.run_trf.output.dat, ID=IDS, SM=SM),

替换为:

dats = expand(rules.run_trf.output.dat, ID=IDS)
验证说明

修改后工作流逻辑完全通顺:

  • split_fasta将输入基因组按轮询规则拆分为最多200个小fasta文件
  • run_trf为每个小fasta文件独立运行TRF,生成对应的dat结果文件和benchmark记录
  • trf_bed读取所有dat文件,解析TRF结果后排序、合并为单个BED文件输出
  • 最终目标规则trf依赖该合并后的BED文件,可正常触发全流程运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:09:19