首页 > 解决方案 > 通配符对某些规则的链/依赖关系

问题描述

我有一个特殊的用例,我没有在 Snakemake 文档中找到解决方案。

假设在给定的管道中,我有一个包含 3 条规则 a、b 和 c 的部分,它们将运行 N 个样本。

这些规则处理大量数据,出于本地存储限制的原因,我不希望这些规则同时执行。例如规则 a 产生大量数据,然后规则 c 压缩并导出结果。

所以我正在寻找一种将这 3 个规则链接到 1 个样本/通配符的方法,然后才为下一个样本执行这 3 个规则。所有这些都是为了确保本地空间可用。

谢谢

标签: snakemake

解决方案


我同意这是 Snakemake 仍然没有解决方案的问题。但是,您可能有一个解决方法。

rule all:
    input: expand("a{sample}", sample=[1, 2, 3])

rule a:
    input: "b{sample}"
    output: "a{sample}"

rule b:
    input: "c{sample}"
    output: "b{sample}"

rule c:
    input: 
        lambda wildcards: f"a{wildcards.sample-1}"
    output: "c{sample}"

这意味着在样本1c的规则输出准备好之前,样本2的规则不会启动 。您需要添加伪输出或使 lambda 更复杂。aa0


推荐阅读