首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将rule_1输出文件与获取文件文件夹的rule_2输入链接[snakemake]

将rule_1输出文件与获取文件文件夹的rule_2输入链接[snakemake]
EN

Stack Overflow用户
提问于 2022-03-07 16:53:57
回答 1查看 31关注 0票数 1

我试图用两个规则在snakemake中创建一个工作流:

  • pool_files,根据保存在不同文件夹中的基因组列表,将每个基因组复制到同一个文件夹中。
  • 选择包含基因组副本的文件夹的路径的run_pairwise运行一个函数(在ANI计算中是这样,但与此无关),并将所有结果保存在一个输出文件夹中。

我的问题是,第一个规则pool_files的输入和输出是单个文件,而第二个规则run_pairwise的输入和输出是文件夹。我的解决办法是提供复制的pool_files文件和run_pairwise的输出文件夹作为rule all的输入,但是,在最好的情况下,我得到的错误如下:

ChildIOException:文件/目录是另一个输出的子程序

我读取的表(下面示例中的对象gnm_table )和包含所有基因组路径的表如下所示:

代码语言:javascript
复制
                  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

虽然我到目前为止想出的诱惑代码如下所示:

代码语言:javascript
复制
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}'

我应该采取什么策略来完成这项任务?也许我该用个检查点?非常感谢您的投入!

EN

回答 1

Stack Overflow用户

发布于 2022-03-10 04:09:54

没有必要在检查站。当您不知道规则将创建的文件(例如,您不知道算法找到的集群数量)时,就需要检查点。在您的情况下,您可以在gnm_table中获得所需的一切。您可以定义一条规则,要求将需要在rule pool_files中复制的所有文件作为其输入。此规则的输出可能是标志,此标志可能是rule calculate_ANI的输入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71384557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档