snake在输入和输出中使用不同的通配符

问题描述 投票:0回答:1

我正在尝试实现以下目标:将我的工作流程应用于一组染色体,每个染色体都有多种方法。因此,输入始终是一个带有一个通配符

chr
的文件,而输出将具有两个
chr & method
。问题是,好像

  1. 如果 output
    {chr}_{method}_rslts.csv
    ,snakemake 期望 input 有这两个通配符
  2. 如果 output
    {chr}_rslts_{method}.csv
    ,snakemake 会抱怨缺少规则的输入

你能帮忙吗

rule all:
    input:
       expand(config["outdir"] + "/{chr}_{method}_rslts.csv", chr = ["chr1", "chr2", "chr3"], method = ["method1", "method2"])

rule example_rule:
    input:
       config["indir"] + "/{chr}_fltrd.csv", 
    output:
       config["outdir"] + "/{chr}_{method}_rslts.csv",
    shell:
       """
        touch {output}
       """
snakemake
1个回答
0
投票

当输出的通配符比输入的通配符多时,我没有发现任何问题。特别是你的例子 snakemake --version # kind of old :D 7.8.5 snakemake -nq Building DAG of jobs... Job stats: job count min threads max threads ------------ ------- ------------- ------------- all 1 1 1 example_rule 6 1 1 total 7 1 1

大概在真正的规则中,您在命令中使用 method 的值。

相反,输入中的通配符多于输出中的通配符,您必须使用输入函数根据输出通配符设置所有输入通配符。请记住,snakemake 确定需要“向后”运行的内容,从请求的输出到输入,因此输出必须比输入具有更多的通配符。

一个相关的问题是,如果您有多个输出,其中一些输出不使用所有通配符。假设你的规则是:

rule example_rule: input: config["indir"] + "/{chr}_fltrd.csv", output: config["outdir"] + "/{chr}_{method}_rslts.csv", config["outdir"] + "/{chr}_summary.csv",

这是一个错误,因为“通用”文件会在写入时发生冲突并导致未知的问题。错误消息解释了这一点。如果这不能解决您的问题,请澄清您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.