这是我的snakemake个工作流程中的一个部分:

enter image description here

对于某些数据集,规则bagel2bf偶尔会失败,但我不希望它在整个snakemake次运行中失败.

我如何调整工作流,以便如果规则bagel2bf中有退出代码1,它将跳过依赖于其输出的规则(可能还会打印一条警告消息)?

以下是规则的代码:

rule install_bagel2:
    output:
        directory("bagel2_software/"),
    shell:
        "git clone https://github.com/hart-lab/bagel.git {output}"
    

rule convert_count_table:
    input:
        "count/counts-aggregated.tsv"
    output:
        "count/counts-aggregated-bagel2.tsv"
    params:
        fa=fasta,
    resources:
        runtime=config["resources"]["stats"]["time"]
    conda:
        "envs/stats.yaml"
    script:
        "scripts/convert_count_table.py"


rule bagel2fc:
    input:
        "bagel2_software/",
        "count/counts-aggregated-bagel2.tsv",
    output:
        "bagel2/{bcomparison}/{bcomparison}.foldchange"
    resources:
        runtime=config["resources"]["stats"]["time"]
    conda:
        "envs/stats.yaml"
    log:
        "logs/bagel2/fc/{bcomparison}.log"
    script:
        "scripts/bagel2fc.py"


rule bagel2bf:
    input:
        "bagel2_software/",
        "bagel2/{bcomparison}/{bcomparison}.foldchange",
    output:
        "bagel2/{bcomparison}/{bcomparison}.bf"
    params:
        species=config["lib_info"][library]["species"],
    resources:
        runtime=config["resources"]["stats"]["time"]
    conda:
        "envs/stats.yaml"
    log:
        "logs/bagel2/bf_{bcomparison}.log"
    script:
        "scripts/bagel2bf.py"


rule bagel2pr:
    input:
        "bagel2_software/",
        "bagel2/{bcomparison}/{bcomparison}.bf",
    output:
        report("bagel2/{bcomparison}/{bcomparison}.pr", caption="report/bagel2.rst", category="BAGEL2")
    params:
        species=config["lib_info"][library]["species"]
    resources:
        runtime=config["resources"]["stats"]["time"]
    conda:
        "envs/stats.yaml"
    log:
        "logs/bagel2/pr_{bcomparison}.log"
    script:
        "scripts/bagel2pr.py"


rule plot_bf:
    input:
        "bagel2/{bcomparison}/{bcomparison}.bf"
    output:
        report("bagel2_plots/{bcomparison}/{bcomparison}.bf.pdf", caption="report/bagel2_plots.rst", category="BAGEL2 plots", subcategory="{bcomparison}", labels={"Comparison":"{bcomparison}", "Figure":"BF plot"})
    conda:
        "envs/stats.yaml"
    script:
        "scripts/plot_bf.py"


rule plot_pr:
    input:
        "bagel2/{bcomparison}/{bcomparison}.pr"
    output:
        report("bagel2_plots/{bcomparison}/{bcomparison}.pr.pdf", caption="report/bagel2_plots.rst", category="BAGEL2 plots", subcategory="{bcomparison}", labels={"Comparison":"{bcomparison}", "Figure":"Precision-recall plot"})
    conda:
        "envs/stats.yaml"
    script:
        "scripts/plot_pr.py"

推荐答案

我会抓住规则bagel2bf中的例外,例如,使用pythontry/except或类似的机制.然后写出预期的文件,其中要么不包含任何内容,要么包含有关异常的一些有用的、可解析的信息.下游规则将通过写入空输出文件或一些标志文件,以类似的方式处理此类文件.

我不知道有一种机制可以明确地告诉Snakemaker在出现故障时跳过部分管道,我认为这将与Snakemaker的原则背道而驰.我认为上面的解决方案是合理的,因为如果失败在某种程度上是意料之中的,那么下游规则应该相应地处理它们,而不是跳过它们.

Python相关问答推荐

调查TensorFlow和PyTorch性能的差异

从多行文本中提取事件对

在Python中添加期货之间的延迟

我可以使用极点优化这个面向cpu的pandas代码吗?

在Docker中运行HAProxy时无法获得503服务

除了Python之外,可以替代bare?

在Windows上启动新Python项目的正确步骤顺序

为什么dict(id=1,**{id:2})有时会引发KeyMessage:id而不是TypMessage?

使用多个性能指标执行循环特征消除

用gekko解决的ADE方程系统突然不再工作,错误消息异常:@错误:模型文件未找到.& &

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

替换字符串中的多个重叠子字符串

将数据框架与导入的Excel文件一起使用

如何从在虚拟Python环境中运行的脚本中运行需要宿主Python环境的Shell脚本?

我们可以为Flask模型中的id字段主键设置默认uuid吗

如何让这个星型模式在Python中只使用一个for循环?

当递归函数的返回值未绑定到变量时,非局部变量不更新:

创建可序列化数据模型的最佳方法

从嵌套的yaml创建一个嵌套字符串,后面跟着点

try 检索blob名称列表时出现错误填充错误""