Snakemake: Как предотвратить выполнение неоднозначных правил?

1

Я использую snakemake в контексте машинного обучения. У меня есть два правила (process_x_only и process_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, я использую инструкцию 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 создавать DAG, где выполняется только process_x_and_y?

Чтобы уточнить: Это большое упрощение моей реальной проблемы. Я знаю, что изменение ограничений моего оператора проблемы решит проблему, но меня интересует, как решить, что snakemake выполняет оба правила в ruleorder.

Чтобы добавить: при выполнении refit model правил отображается следующее предупреждение:

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

{'processed_x.txt'}
Теги:
snakemake

1 ответ

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 refit_model predict_model. Помогает ли вам решить проблему?

Для реального решения я думаю, что snakemake придется обрезать DAG после его создания. Я предлагаю вам открыть новый вопрос здесь.

  • 0
    Спасибо за предложение использовать зависимости правил. Это действительно решит проблему, которую я здесь изложил. К сожалению, мой рабочий процесс более сложен, чем этот простой пример.
  • 0
    Обрезка DAG после ее создания действительно будет лучшим решением. Я открою новый выпуск для этого.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню