嗨,我一直在尝试将metabat2和checkm放入管道中,以查看样本中存在哪些细菌,但是我一直遇到蛇虫错误。我的snakemake代码是
rule all:
input:
[f"nanoplot_out/" for sample in samples],
[f"zipped/zipped.gz" for sample in samples],
[f"filtered/nanofilt_out.gz" for sample in samples],
[f"unzipped/read.fastq" for sample in samples],
[f"assembled/" for sample in samples],
[f"nanopolish/assembly.fasta" for sample in samples],
[f"medaka_consensus/" for sample in samples],
[f"input/consensus.fasta" for sample in samples],
[f"output_antismash/" for sample in samples],
[f"metabat2/bin" for sample in samples],
[f"metabat2/CheckM.txt" for sample in samples]
rule metabat2:
input:
"medaka_consensus/consensus.fasta"
output:
directory("metabat2/")
conda:
"envs/metabat2.yaml"
shell:
"metabat2 -i {input} -o {output} -v"
rule checkM:
input:
"metabat2/"
output:
"metabat2/CheckM.txt"
conda:
"envs/metabat2.yaml"
shell:
"checkm lineage_wf -f {output} -t 30 -x fa {input}"
我的错误消息是MissingInputException in line 4 of /home/ec2-user/snakemake_JHB-2-14-20_uncor_polish_anti5_meta/Snakefile:
Missing input files for rule all:
metabat2/bin
有没有人可以帮助我使其正常工作?
错误消息指出,snakemake找不到任何可以创建文件(或目录?)metabat2/bin
的规则。假设它是由规则metabat2
创建的,则需要将其添加为output
的一部分。
rule metabat2:
input:
"medaka_consensus/consensus.fasta"
output:
a = metabat2/bin
b = directory("metabat2/")
conda:
"envs/metabat2.yaml"
shell:
"metabat2 -i {input} -o {output.b} -v"
我按照Manavalan Gajapathy的描述更改了代码后,遇到另一个错误。最后,我将其与以下代码一起使用。
rule metabat2:
input:
"input/consensus.fasta"
output:
a = "metabat2/bin",
conda:
"envs/metabat2.yaml"
shell:
"metabat2 -i {input} -o {output.a} -v"
rule checkM:
input:
"metabat2/bin"
output:
c = "bacteria/CheckM.txt",
d = directory("checkm/")
conda:
"envs/metabat2.yaml"
shell:
"checkm lineage_wf -f {output.c} -t 10 -x fa {input} {output.d}"