Предоставление списка парных файлов в качестве входных данных для Snakemake - PullRequest
0 голосов
/ 08 июля 2019

Я сделал простой конвейер, где я беру пару файлов, объединяю их (ну, не совсем, но давайте представим, что они объединены) в один, имя файла которого представляет собой простую комбинацию двух (file1_file2.output), и выполняю некоторые операции. Конвейер работает отлично, если я вручную предоставляю имена файлов для file1 и file2, но что мне действительно нужно сделать, это примерно так:

Давайте представим, что у меня есть 5 файлов A , B , C , D и E . Я хочу запустить конвейер для этих пар: A-D , B-D и C-E , а это Snakefile

rule all:
    input:
        expand("output/{file1}_{file2}.output")

rule Paste:
    input:
        F1="{file1}",
        F2="{file2}"
    output:
        out="output/{file1}_{file2}.output"
    shell:
        "paste {input.F1} {input.F2} > {output.out}"

Каков наилучший способ сделать это?

1 Ответ

1 голос
/ 08 июля 2019

Вы должны определить настоящие имена целевых файлов в правиле all.Затем используйте подстановочные знаки, чтобы получить входные файлы.Это выглядело бы так:

rule all:
    input:
        expand("output/{combination}.output", combination=["A_D","B_D","C_E"])

rule Paste:
    input:
        F1="{file1}",
        F2="{file2}"
    output:
        out="output/{file1}_{file2}.output"
    shell:
        "paste {input.F1} {input.F2} > {output.out}"

Обратите внимание, что использование плохого разделителя, такого как "_", может испортить определение подстановочных знаков, если ваши входные файлы (A, B, C, D, E) также содержат "_».Я хотел бы использовать что-то, что, как вы уверены, не будет использоваться в имени файла (то есть: "__", "_-_" или что-нибудь подходящее)

...