我试图用两个规则在snakemake中创建一个工作流:
pool_files,根据保存在不同文件夹中的基因组列表,将每个基因组复制到同一个文件夹中。run_pairwise运行一个函数(在ANI计算中是这样,但与此无关),并将所有结果保存在一个输出文件夹中。我的问题是,第一个规则pool_files的输入和输出是单个文件,而第二个规则run_pairwise的输入和输出是文件夹。我的解决办法是提供复制的pool_files文件和run_pairwise的输出文件夹作为rule all的输入,但是,在最好的情况下,我得到的错误如下:
ChildIOException:文件/目录是另一个输出的子程序
我读取的表(下面示例中的对象gnm_table )和包含所有基因组路径的表如下所示:
dir file
0 _input/genomes/ref aaa_v1.0.fa
1 _input/genomes bbb.fa
2 _input/genomes ccc.fa
3 _input/genomes ddd.fa虽然我到目前为止想出的诱惑代码如下所示:
import os
rule all:
input:
expand("_results/pool_gnms/{target}", target=gnm_table.file),
"_plots/ANI"
rule pool_files:
input:
i_gnm = lambda wildcards: os.path.join(gnm_table.dir[gnm_table.file == wildcards.target].to_string(), wildcards.target)
output:
gnm_link = "_results/pool_gnms/{target}",
shell:
'ln -s '
'{input.i_gnm} '
'{output.gnm_link}'
rule calculate_ANI:
input:
pool_dir = "_results/pool_gnms",
output:
ANI_dir = directory("_results/ANI")
shell:
'average_nucleotide_identity.py '
'-o {output.ANI_dir} '
'-i {input.pool_dir}'我应该采取什么策略来完成这项任务?也许我该用个检查点?非常感谢您的投入!
发布于 2022-03-10 04:09:54
没有必要在检查站。当您不知道规则将创建的文件(例如,您不知道算法找到的集群数量)时,就需要检查点。在您的情况下,您可以在gnm_table中获得所需的一切。您可以定义一条规则,要求将需要在rule pool_files中复制的所有文件作为其输入。此规则的输出可能是标志,此标志可能是rule calculate_ANI的输入。
https://stackoverflow.com/questions/71384557
复制相似问题