我正在编写规则来处理一些数据:
目录中的数据将类似于:
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....
如果输出与输入不同,为什么以递归方式运行?以及我该如何解决?
答案 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}
"""