#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}"