네임스페이스 (Namespaces)

Snakemake는 규칙(rule) 내에서 다양한 정보를 구조화된 방식으로 관리하며, 이를 위해 여러 가지 네임스페이스를 제공합니다. 각 네임스페이스는 관련 있는 변수들의 묶음이라고 생각하면 됩니다.

주요 네임스페이스 요약

네임스페이스 설명 사용 예시
input 규칙의 입력 파일들에 접근 {input}, {input.a}
output 규칙의 출력 파일들에 접근 {output}, {output.result}
wildcards 현재 작업에 할당된 와일드카드 값 {wildcards.sample}
params 규칙에 정의된 비파일 매개변수 {params.ksize}
config 설정 파일(config.yaml)의 내용 {config[sample]}
threads 해당 규칙에 할당된 CPU 스레드 수 {threads}
resources 메모리, GPU 등 할당된 자원 정보 {resources.mem_mb}
log 규칙에서 지정된 로그 파일 경로 {log}

주의사항: 유효 범위 (Scope)

대부분의 네임스페이스(특히 input, output, wildcards, params)는 해당 규칙 내부에서만 유효합니다.

이는 와일드카드가 개별 규칙이 인스턴스화(Instantiation)될 때 결정되기 때문입니다. 규칙 밖에서(예: 파일의 상단) wildcards.sample을 참조하려고 하면 오류가 발생합니다.

# 잘못된 예: 규칙 밖에서 wildcards 참조
# print(wildcards.sample) 

rule example:
    input: "{sample}.txt"
    shell:
        "echo {wildcards.sample}" # 올바른 예: 규칙 내에서 사용

네임스페이스의 편리함

네임스페이스를 사용하면 셸 명령어가 매우 깔끔해집니다. 파일 경로를 일일이 기억하고 타이핑할 필요 없이, input이나 output과 같은 이름으로 추상화하여 사용할 수 있기 때문입니다. 이는 워크플로의 유지보수성을 크게 높여주는 Snakemake의 핵심 설계 철학입니다.