我在机器学习环境中使用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时才应运行process_x_and_y,否则仅处理x和process_x_only就足够了可以运行。)。这解决了歧义性问题,但是引入了另一个问题。当我执行时:

snakemake predictions_refit.txt


snakemake将首先执行process_x_only,然后执行process_x_and_y,而在这种情况下,我只希望执行process_x_and_y。如何使snakemake构建仅执行process_x_and_y的DAG?

需要说明的是:这是我实际问题的极大简化。我知道更改问题声明的限制将解决问题,但是我对如何解决snakemake在规则顺序中执行两个规则感兴趣。

添加:执行规则refit model时,显示以下警告:

Warning: the following output files of rule process_x_only were not
present when the DAG was created:

{'processed_x.txt'}

最佳答案

这是个有趣的问题。我不知道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

关于python - Snakemake:如何防止模棱两可的规则同时执行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50911726/

10-12 20:12