챕터 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 상세 문서를 참고하세요.