Snakemake:如何防止模糊规则被执行?

时间:2018-06-18 14:27:00

标签: python snakemake

我在机器学习环境中使用snakemake。我有两个规则(process_x_onlyprocess_x_and_y),它们以processed_x.txt作为目标输出,因此不明确。请参阅以下代码:

rule process_x_only:
    input:
        'x.txt',
    output:
        'processed_x.txt'

rule process_x_and_y:
    input:
        'x.txt',
        'y.txt'
    output:
        'processed_x.txt',
        'processed_y.txt'

ruleorder: process_x_only > process_x_and_y

rule refit_model:
    input:
        'processed_x.txt',
        'processed_y.txt'
    output:
        'predictions_refit.txt'

rule predict_model:
    input:
        'processed_x.txt'
    output:
        'predictions.txt'

按照snakemake的documentation,我使用ruleorder语句来指定最好只处理x(即只有当y 需要才能处理{应该运行{1}},否则只需处理x即可运行process_x_and_y。)。这解决了歧义问题,但引入了另一个问题。当我执行:

process_x_only

snakemake将首先执行snakemake predictions_refit.txt ,然后执行process_x_only,而在这种情况下,我只想执行process_x_and_y。如何让snakemake构建一个仅执行process_x_and_y的DAG?

澄清一下:这是我实际问题的一个很大的简化。我知道更改我的问题陈述的限制将解决问题,但我感兴趣的是如何解决snakemake正在规则顺序中执行这两个规则。

添加:执行规则process_x_and_y时,会显示以下警告:

refit model

1 个答案:

答案 0 :(得分:1)

这是一个有趣的问题。我不知道snakemake不能独自解决这个问题。一种破解方法是告诉snakemake哪个规则为refit_model

生成文件
rule refit_model:
    input:
        rules.process_x_and_y.output
    output:
        'predictions_refit.txt'

但是,在更复杂的工作流程中,或者尝试运行snakemake refit_model predict_model时,仍然会遇到麻烦。骇客能为您解决问题吗?

对于一个真正的解决方案,我认为snakemake在创建DAG之后必须修剪一下。我建议您打开一期新书here