这里是snakemake教程的先进部分很短的例子:Snakemake:命名规则,而不是目标文件
rule bwa_map:
input:
"data/genome.fa",
lambda wildcards: config["samples"][wildcards.sample]
output:
"mapped_reads/{sample}.bam"
threads: 8
shell:
"bwa mem -t {threads} {input} | samtools view -Sb - > {output}"
现在让我们说,我这条规则几个月前写的,我不记得了输出文件名称。 我的理解是,我无法通过调用规则名称运行snakemake,因为这将导致一个错误:
$ snakemake bwa_map
InputFunctionException in line 9 of Snakefile:
AttributeError: 'Wildcards' object has no attribute 'sample'
Wildcards:
$
首先,我不明白为什么snakemake不能使用lambda函数从配置推断输入文件因为它很清楚我指的是“样本”部分。
其次,有没有解决方法呢? 因为它是很容易用好老的Makefile做的只是使用旧的Makefile和您的帮助提前像
$ make bwa_map INPUT=data/samples/A.fastq
由于输入一些运行相同bwa_map规则。 Benoist
我承认Snakemake无法知道,因为你说的那么值使用通配符,但我不明白为什么它必须是这样。我看到它的方式。在配置文件中,我以“A:/path/to/foo.txt,B:/ path/to/bar.txt”的格式定义样本,对于工作流程程序来说应该足以说“好吧,那就是我的输入文件,我应该把输出文件命名为...让我们去吧“。因此,程序有它的输入,输出和指令,所以它可以产生输出文件,而用户不必从头开始知道输出文件名 – blaurent