#python-3.x #workflow #snakemake
Вопрос:
Когда я бегу snakemake -np
, там написано: SyntaxError in line 22 of /home/snakefile: positional argument follows keyword argument
Похоже, что это проблема в разделе ввода rule prokka
, потому что другие части работают нормально.
Ниже мой змеиный файл:
configfile:"config.yml"
id=config['id']
rule all:
input:
expand("{sample_id}/assembly/skesa/{sample_id}.fa", sample_id=id),
directory(expand("{sample_id}/annotation/prokka/", sample_id=id))
rule skesa:
output:
contigs = "{sample_id}/assembly/skesa/{sample_id}.fa"
input:
r1 = lambda wildcards: config["reads"][wildcards.sample_id]['r1'],
r2 = lambda wildcards: config["reads"][wildcards.sample_id]['r2']
params:
cpus = config['skesa']['cpus'],
memory = config['skesa']['memory']
shell:
'skesa --reads {input.r1},{input.r2} --cores {params.cpus} --memory {params.memory} > {output}'
rule prokka:
output:
faa = "{sample_id}/annotation/prokka/{sample_id}.faa",
directory("{sample_id}/annotation/prokka/{sample_id}}")
input:
contigs = rules.skesa.output.contigs
shell:
"prokka --outdir {output} --prefix {wildcards.sample_id} {params.contigs}"
Ответ №1:
Проблема в том, что:
rule prokka:
output:
faa = "{sample_id}/annotation/prokka/{sample_id}.faa",
directory("{sample_id}/annotation/prokka/{sample_id}}")
Я точно не знаю, что делает snakemake под капотом, но я думаю, что он передаст аргументы каждой директивы (ввод, вывод и т. Д.) В Качестве словаря Функции. В python аргументы функций без имени (позиционные) должны стоять перед аргументами с именем. Погуглите positional argument follows keyword argument
, чтобы узнать больше.
Короче говоря: либо измените порядок ваших выходных файлов:
rule prokka:
output:
directory("{sample_id}/annotation/prokka/{sample_id}"),
faa = "{sample_id}/annotation/prokka/{sample_id}.faa",
Или назовите их всех (возможно, лучше):
rule prokka:
output:
faa = "{sample_id}/annotation/prokka/{sample_id}.faa",
outdir= directory("{sample_id}/annotation/prokka/{sample_id}"),
...
shell:
"prokka --outdir {output.outdir} --prefix {wildcards.sample_id} ..."
Кроме того, я думаю {sample_id}}
, что должно быть {sample_id}
Комментарии:
1. Тх много! Я предпочитаю 2-й метод (дал название «outdir»), и он сработал. Кроме того, спасибо, что напомнили о дублированном «}»