определите ввод и вывод как элементы списка в snakemake

#python #snakemake

#питон #змеиный пирог

Вопрос:

Привет, я новичок в snakemake, и у меня есть некоторые проблемы. Я определил два правила ниже.

myrule1 работает и делает то, что я хочу, но я играю с синтаксисом и пытаюсь сделать его немного более продвинутым, но у меня есть некоторые проблемы. Они находятся в myrule2.

Разве невозможно определить входные и выходные переменные как элементы списка?

Спасибо, я знаю, что это простые глупые вопросы, но у меня есть некоторые проблемы с пониманием того, что искать.

 FILES = "file.r1","file.r2" EXT=".p1.gz",".p2.gz",".p3.gz"  print("files: " str(FILES),"n")  rule all:  input:  expand("OUT{ext}",file=FILES,ext=EXT)    rule myrule1:  input:  R1 = FILES[0],  R2 = FILES[1]  output:  r1 = "OUT" EXT[0],  r2 = "OUT" EXT[1],  c = "OUT" EXT[2]  shell:  "myprog -in1 {input.R1} -in2 {input.R2} -out OUT"  ##below doesnt work rule myrule2:  input:  R1,R2 = FILES  output:  r1,r2,c = ["OUT" x for x in EXT]   shell:  "myprog -in1 {input.R1} -in2 {input.R2} -out OUT"  

Комментарии:

1. Можете ли вы объяснить, что это такое, что не работает? Показывать сообщения об ошибках, ожидаемые и наблюдаемые результаты и т.д… Обратите внимание, что у snakemake есть --dry-run опция, полезная для тестирования.

Ответ №1:

Ответ зависит от того, что вы хотите сделать со своим вторым правилом myrule2 . Если вы хотите использовать исходные ФАЙЛЫ, вам нужно снова указать входной файл. Это также для snakemake, чтобы иметь дело с подстановочными знаками.

Если вы хотите объединить все входные файлы, которые вы можете использовать, разверните, как показано ниже:

 FILES = "file.r1","file.r2" EXT=".p1.txt",".p2.txt",".p3.txt"  print("files: " str(FILES),"n")  rule all:  input:  expand("OUT{ext}",file=FILES,ext=EXT),  expand("OUT2{ext}",file=FILES,ext=EXT)  rule myrule1:  input:  R1 = FILES[0],  R2 = FILES[1]  output:  expand("OUT{ext}", ext=EXT)  shell:  "echo {input} | tee {output}"  rule myrule2:  input:  expand(FILES, FILES=FILES)  output:  expand("OUT2" x for x in EXT)   shell:  "echo {input} | tee {output}"