1 回答

TA貢獻(xiàn)1880條經(jīng)驗(yàn) 獲得超4個(gè)贊
首先,我認(rèn)為你的解決方案過于復(fù)雜,使得它對(duì)于 Snakemake 來說不太慣用。因此,您在執(zhí)行該規(guī)則時(shí)遇到了問題。無論如何,讓我按照您提出的問題來回答這個(gè)問題。
兩個(gè)文件相同也就不足為奇了Nreads_DIRx.txt,因?yàn)檩斎氩灰蕾囉谳敵鲋械娜魏瓮ㄅ浞?/p>
rule concatNreads:
input:
expand(INDIR+'/{dir}/{smp}_Nreads.txt', dir_samples, dir=DIRS, smp=SAMPLES)
這里,該expand函數(shù)解析dir和smp變量,生成完全指定的文件名列表。您需要的是真正取決于輸出中的通配符的東西:
rule concatNreads:
input:
lambda wildcards: ...
是{dir}使用輸出中的通配符完全指定的,因此您不需要從變量中為其分配值DIRS:
rule concatNreads:
input:
lambda wildcards: expand(INDIR+'/{dir}/{smp}_Nreads.txt', dir=wildcards.dir, smp=func(wildcards.dir))
現(xiàn)在的問題是如何實(shí)現(xiàn)這個(gè)func為目錄生成樣本列表的函數(shù)。我花了一段時(shí)間才理解您使用combine_dir_samplesand的技巧filter_combinator,所以我將其留給您func使用該代碼實(shí)現(xiàn)該函數(shù)。但你真正需要的是 DIR -> SAMPLES 中的地圖:
dir_to_samples = {"DIR1": ["smp1", "smp2"], "DIR2": ["smp3", "smp4"]}
def func(dir):
return dir_to_samples[dir]
這dir_to_samples可能可以更容易地評(píng)估,但這是您修改后的解決方案:
for dir in DIRS:
samples, = glob_wildcards(INDIR+'/'+dir+'/{smp}.fastq.gz')
dir_to_samples.append({dir: samples})
添加回答
舉報(bào)