【发布时间】:2020-05-20 15:05:48
【问题描述】:
我目前有一个snakemake工作流程,需要使用lambda通配符,设置如下:
蛇文件:
configfile: "config.yaml"
workdir: config["work"]
rule all:
input:
expand("logs/bwa/{ref}.log", ref=config["refs"])
rule bwa_index:
input:
lambda wildcards: 'data/'+config["refs"][wildcards.ref]+".fna.gz"
output:
"logs/bwa/{ref}.log"
log:
"logs/bwa/{ref}.log"
shell:
"bwa index {input} 2&>1 {log}"
配置文件:
work: /datasets/work/AF_CROWN_RUST_WORK/2020-02-28_GWAS
refs:
12NC29: GCA_002873275.1_ASM287327v1_genomic
12SD80: GCA_002873125.1_ASM287312v1_genomic
这行得通,但我不得不使用 hack 来获取 bwa_index 的输出来使用 all 的输入。我的技巧是生成一个日志文件作为bwa_index 的一部分,将日志设置为bwa_index 的输出,然后将all 的输入设置为这些日志文件。正如我所说,它有效,但我不喜欢它。
问题是bwa_index 的真实输出是格式,例如GCA_002873275.1_ASM287327v1_genomic.fna.sa。因此,要指定这些输出文件,我需要使用 lambda 函数作为输出,例如:
rule bwa_index:
input:
lambda wildcards: 'data/'+config["refs"][wildcards.ref]+".fna.gz"
output:
lambda wildcards: 'data/'+config["refs"][wildcards.ref]+".fna.sa"
log:
"logs/bwa/{ref}.log"
shell:
"bwa index {input} 2&>1 {log}"
然后使用带有 expand 的 lambda 函数作为 rule all 的输入。但是,snakemake 不接受函数作为输出,所以我完全不知道如何做到这一点(除了我的 hack)。有没有人有一个明智的解决方案的建议?蒂亚!
【问题讨论】:
标签: snakemake