Snakemake规则中的递归输入调用

时间:2018-11-21 21:50:53

标签: snakemake

我正在编写规则来处理一些数据:
目录中的数据将类似于:

myfirst.trim_1P, myfirst.trim_2P, mysecond.trim_1P, mysecond.trim_2P,...

rule trim_data:
        input:"{dataset}/{sample}.trim_{r}P"
        output:"{dataset}/{sample}.{r}.fastq"
        params:
            length=14
        shell:
            """
            reformat.sh forcetrimleft="{params.length}" in="{input}" out="{output}"
            """

我遇到此错误:

WorkflowError:
RecursionError: maximum recursion depth exceeded
If building the DAG exceeds the recursion limit

myDir/myfirst.1.trimed.1.trimed.2.trimed.2.trimed.2....

如果输出与输入不同,为什么以递归方式运行?以及我该如何解决?

2 个答案:

答案 0 :(得分:0)

这是一个疯狂的猜测...通配符捕获的可能比应捕获的要多,因为它们被解释为正则表达式。如果{dataset}{sample}{r}采用已定义的值列表,请尝试使用以下方法约束其范围:

wildcard_constraints:
    dataset= '|'.join([re.escape(x) for x in DATASET]),
    sample= '|'.join([re.escape(x) for x in SAMPLE]),
    r= '|'.join([re.escape(x) for x in R]),

其中DATASET,SAMPLE和R是值列表(例如R= ['1', '2']

答案 1 :(得分:0)

我遇到了类似的错误(如下)。结果证明这是由于规则输出的文件名与不同规则相同。更改输出文件的名称修复了此错误。

代码:

all_chart_divs.innerHTML = '<img src="'+allchart.getImageURI() +'">';

错误:

rule merge_sample_chr:
    input:

            bcftools=config["bcftools"],
            chr_list=expand(config["vcf_dir_ase"]+"/Eagle/all_{{sample}}_chr{this_chr}_sorted.vcf.gz",this_chr=CHRS)
    params:
            chr_list=expand("I="+config["vcf_dir_ase"]+"/Eagle/all_{{sample}}_chr{this_chr}_sorted.vcf.gz",this_chr=CHRS)

    output:
            vcf=config["vcf_dir_ase"]+"/Eagle/all_{sample}.vcf.gz"
    shell:
            """
            {input.bcftools} concat {input.chr_list} -Oz -o {output}
            """