Snakemake использует подстановочные знаки в пути функции python - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть простая функция, которая читает файл (одна строка) и получает первый элемент после разделения.

def get_wc(wc):
    file = open(wc,"r")
    normalization_value = file.readline().split(' ')[0]
    return(normalization_value)

Я использую эту функцию в создании правила змеи.

rule compute_fc:
input:
    "data/annotated_clones/{cdna}_paste_{lib}.annotated.bed"
output:
    "data/fold_change/{cdna}_paste_{lib}.fc.bed"
params:
    size_cdna=get_wc("data/wc_bed/cdna/{cdna}.wc.txt"),
    size_lib=get_wc("data/wc_bed/library/{lib}.wc.txt")
shell:'''
    awk -v cdna1={params.size_cdna} -v inp={params.size_lib} -v addon=1 -v FS='\t' -v OFS='\t' '/^chr/{{ratio=(($7+addon)/($8+addon))*(inp/cdna1);print $0,ratio}}' {input} > {output}
'''

Я пытаюсь получить значение, возвращаемое функцией get_w c, и использовать его в качестве параметров в правиле создания змеи.

Но Snakemake не находит путь с подстановочными знаками поэтому он пытается найти путь с подстановочными знаками и, очевидно, он не работает.

[Errno 2] No such file or directory: 'data/wc_bed/cdna/{cdna}.wc.txt'

1 Ответ

2 голосов
/ 13 февраля 2020

Я думаю, что использование лямбда-функции, как это, должно работать:

params:
    size_cdna = lambda wildcards: get_wc(f"data/wc_bed/cdna/{wildcards.cdna}.wc.txt")
    size_lib = lambda wildcards: get_wc(f"data/wc_bed/library/{wildcards.lib}.wc.txt")

Взгляните здесь для документов.

...