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

如何在工具参数中使用通配符?附Snakemake示例

如何在Snakemake参数中正确运用通配符?

我来帮你梳理下在Snakemake里参数中运用通配符的正确姿势,结合你给出的示例代码拆解说明:

  • 直接引用通配符占位符
    在你的gatk_Mutect2规则里,params中的name_tumor='{case}'是最基础的用法——这里的{case}和output字段里的{case}.mutect2.vcf完全对应,Snakemake会自动把当前处理的case值(比如你字典里的120)替换进去,最终name_tumor会被解析为120。

  • 通过wildcards对象实现动态参数逻辑
    如果参数需要更灵活的逻辑(比如基于通配符值做扩展或查找),可以直接在参数中调用wildcards对象。举个例子,如果想给肿瘤样本名加个标识后缀,你可以这么写:

    params: 
        genome="ref/hg19.fa", 
        target= "chr12", 
        name_tumor=f"{wildcards.case}_tumor_sample"
    

    当处理case=120时,name_tumor就会变成120_tumor_sample,非常灵活。

  • 自定义函数中用wildcards关联配对样本
    你写的get_files_somatic函数是配对样本场景的典型用法:通过wildcards.case获取当前的肿瘤样本ID,再从字典aDict中匹配对应的正常样本ID,最终返回两个样本的BAM文件路径。这种方式能让输入文件和通配符动态绑定,完美适配肿瘤-正常配对分析的需求。

  • 用expand批量生成任务目标
    规则all里的expand("{case}.mutect2.vcf", case=aDict.keys())是批量调度任务的核心——它告诉Snakemake,所有aDict键对应的.mutect2.vcf文件都是最终需要生成的目标,Snakemake会自动遍历每个case值来调度对应的gatk_Mutect2任务。

最后再提两个关键注意点:

  • 通配符名称要全局一致:比如output里用{case},那么wildcards里就要用wildcards.case,写错名称会导致Snakemake无法识别通配符。
  • 字符串拼接时优先用f-string:如果参数需要复杂拼接,用f-string结合wildcards会比直接拼接字符串更清晰不易错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:00:41