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

Snakemake如何实现部分通配符配对、其余全展开?

解决Snakemake中部分变量配对、部分笛卡尔积的问题

可以实现你要的效果,问题出在当前的expand用法错误地将outputdir也纳入了配对范围。要让BASES和CONTRASTS严格配对,同时每个配对与ALLOUTPUTS中的所有目录做笛卡尔积,只需调整expand的参数顺序:

ruleAll:
    input:
        expand(
            os.path.join("{outputdir}", "{bse}-{contrast}_comparison.bed"),
            outputdir=ALLOUTPUTS,
            zip, bse=BASES, contrast=CONTRASTS
        )

原理说明

  • outputdir=ALLOUTPUTS单独放在前面,不参与配对,会与后面的配对组合做笛卡尔积;
  • zip, bse=BASES, contrast=CONTRASTS指定仅bse和contrast按位置一一配对,生成(A,1)、(B,2)、(C,3)三组组合;
  • 最终每个outputdir都会与这三组配对结合,生成你期望的6个文件路径。

另一种等价写法是先预定义配对组合,再做笛卡尔积:

# 先提前生成BASES与CONTRASTS的配对元组
PAIRS = list(zip(BASES, CONTRASTS))

ruleAll:
    input:
        expand(
            os.path.join("{outputdir}", "{bse}-{contrast}_comparison.bed"),
            outputdir=ALLOUTPUTS,
            bse=[pair[0] for pair in PAIRS],
            contrast=[pair[1] for pair in PAIRS]
        )

这两种写法都能生成你需要的文件路径:

outs1/A-1_comparison.bed
outs1/B-2_comparison.bed
outs1/C-3_comparison.bed
outs2/A-1_comparison.bed
outs2/B-2_comparison.bed
outs2/C-3_comparison.bed

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:39:24