在扩展规则中的变量之后添加.g.vcf而不是.vcf,从而将.g添加到另一个模块的通配符中
我在所有规则中都尝试了以下方法:
{stuff}.g.vcf
{stuff}"+"g.vcf"
{stuff}_var"+".g.vcf"
{stuff}.t.vcf
全部失败,但{stuff} .gvcf或{stuff} .vcf正常
错误:
snake_modules / mark_duplicates.snakefile的第21行中的InputFunctionException: KeyError:“ Mother.g” 通配符: lane = Mother.g
代码:
LANES = config["list2"].split()
rule all:
input:
expand(projectDir+"results/alignments/variants/{stuff}.g.vcf", stuff=LANES)
rule mark_duplicates:
""" this will mark duplicates for bam files from the same sample and library """
input:
get_lanes
output:
projectDir+"results/alignments/markdups/{lane}.markdup.bam"
log:
projectDir+"logs/"+stamp+"_{lane}_markdup.log"
shell:
" input=$(echo '{input}' |sed -e s'/ / I=/g') && java -jar /home/apps/pipelines/picard-tools/CURRENT MarkDuplicates I=$input O={projectDir}results/alignments/markdups/{wildcards.lane}.markdup.bam M={projectDir}results/alignments/markdups/{wildcards.lane}.markdup_metrics.txt &> {log}"
我希望我的最终输出具有{stuff} .g.vcf表示法。请注意,此输出是在另一个蛇模块中创建的,但是错误出现在另一个模块之前的重复标记中。
我尝试了多次更改,但是导致问题的全部规则是.g.vcf。
答案 0 :(得分:0)
我的猜测是{lane}
被解释为正则表达式,并且捕获的内容超出了其应有的范围。尝试在rule all
之前添加:
wildcard_constraints:
stuff= '|'.join([re.escape(x) for x in LANES]),
lane= '|'.join([re.escape(x) for x in LANES])
(另请参见此线程https://groups.google.com/forum/#!topic/snakemake/wVlJW9X-9EU)