챕터 9 - expand로 파일 이름 목록 만들기

compare_genomes 규칙의 파일 목록을 보면, 모두 같은 접미사를 공유하며 같은 규칙으로 만들어진다는 것을 알 수 있습니다. 이를 활용할 수 있을까요?

네! expand(...) 함수를 사용하여 파일 이름 템플릿과 삽입할 값 목록을 전달하면 파일 이름 목록을 자동으로 만들 수 있습니다.

아래에서는 ACCESSIONS라는 접근 번호 목록을 만들고, expand를 사용하여 {acc}.fna.gz.sig 형식의 입력 파일 목록을 생성합니다. ACCESSIONS의 각 값마다 파일 이름이 하나씩 만들어집니다.

ACCESSIONS = ["GCF_000017325.1",
              "GCF_000020225.1",
              "GCF_000021665.1",
              "GCF_008423265.1"]

rule sketch_genome:
    input:
        "genomes/{accession}.fna.gz",
    output:
        "{accession}.fna.gz.sig",
    shell: """
        sourmash sketch dna -p k=31 {input} --name-from-first
    """

rule compare_genomes:
    input:
        expand("{acc}.fna.gz.sig", acc=ACCESSIONS),
    output:
        "compare.mat"
    shell: """
        sourmash compare {input} -o {output}
    """

rule plot_comparison:
    message: "sourmash로 모든 입력 게놈을 비교합니다"
    input:
        "compare.mat"
    output:
        "compare.mat.matrix.png"
    shell: """
        sourmash plot {input}
    """

와일드카드와 expand는 같은 문법을 사용하지만, 하는 일은 전혀 다릅니다.

expand는 템플릿과 삽입할 값 목록을 기반으로 파일 이름 목록을 생성합니다. 주로 Snakemake가 만들어야 할 파일 목록을 지정할 때 사용합니다.

규칙의 와일드카드는 하나 이상의 파일이 실제로 어떻게 만들어질지에 대한 규칙을 제공합니다. “이런 이름의 파일을 만들고 싶다면, 저런 파일에서 시작하여 이렇게 실행하면 됩니다”라는 레시피입니다.

정리하면: - expand: Snakemake에게 무엇을 만들지 알려줍니다. - 와일드카드 규칙: Snakemake에게 어떻게 만들지 알려줍니다.

자세한 내용은 expand 상세 문서를 참고하세요.