У меня есть рабочий процесс, в котором, возможно, нет вывода для некоторых моих образцов. Snakemake ест мой Snakefile с dynamic("{sample}...")
входами и выходами. Однако он также пытается создать файл, называемый буквально "{sample} .out", который не создается ни одним правилом, поскольку подстановочные знаки заменены.
Это мой пример Snakefile для демонстрации рабочего процесса. Существует только одно правило с неизвестным количеством выходных файлов, следующие должны работать с файлами, которые были созданы первым.
rule all:
input: dynamic(expand("{sample}.out", sample = [ "a", "b", "c", "d" ]))
rule first:
output:
dynamic("{sample}.intermediate")
shell:
"(( $RANDOM % 2 )) && touch {output} || true"
rule second:
input:
dynamic("{sample}.intermediate")
output:
"{sample}.out"
shell:
"echo 'processed' > {output}"
После одного раунда Snakemake не все выходные файлы присутствует из-за случайного фактора в первом правиле (возможно, возможно , что все произведены; просто удалите их и перезапустите пример). Snakemake завершается с ошибкой MissingOutputException:
MissingOutputException in line 4 of Snakefile:
Job completed successfully, but some output files are missing. Missing files after 5 seconds:
{sample}.intermediate
В моих реальных данных нет случайности, но я не могу предсказать окончательное количество выходных файлов. У меня есть список возможных примеров имен, которые я расширяю до списка целевых файлов, но не могу узнать, какой (если таковой имеется) приведет к выводу.
Я видел ответ на this другой вопрос , и он помог понять, что для каждого вывода dynamic()
должно быть другое правило, которое принимает dynamic()
ввода. Я не понимаю, почему Snakemake пытается создать файлы "{sample} .out". Как я могу это исправить и получить непредсказуемый набор выходных файлов?