我正在学习Snakemake,我对wildcard.wildcard_name和{wildcard_name}之间的区别感到困惑。例如,如果这是规则:
rule get_genome_fasta:
"""
Retrieve the sequence in fasta format for a genome.
"""
output:
"data/raw_external/{genome_id}.fa.gz"
params:
fasta_path = lambda wildcards: config["genomes"][wildcards.genome_id]["fasta"]
log:
"results/logs/get_genome_fasta/{genome_id}.log"
shell:
"""
wget {params.fasta_path} -O {output} -o {log}
"""wildcards.genome_id和{genome_id}有什么区别?非常感谢!
发布于 2021-01-24 01:38:38
首先,您需要知道Snakemake是基于Python的。如果您熟悉这种编程语言的语法,它将有所帮助。
您可以在不同的上下文中使用这两种形式:定义文件名模式的字符串中的{wildcard_name},更“活动”/“定制”的python代码中的wildcards.wildcard_name。
在input、output和log文件名中,在定义这些文件名所遵循的模式时,使用通配符作为{wildcard_name}。
在解决规则之间的依赖关系时,Snakemake将将规则的输出文件名模式与它已经知道的下游规则需要的具体文件名匹配为输入(这个过程从最上面的规则开始,它应该只有具体的文件名作为输入,而不是模式(请注意,如果使用expand,这会产生一个具体文件名列表)。当这个匹配过程成功后,Snakemake就会知道一些新的东西:
一个规则,它能够提供所需的文件respectively
这些值将用于创建您可以在python代码中操作的wildcards对象:表示使用shell执行的shell命令的字符串、使用run运行的python代码以及在确定params或输入文件名时应该执行的python代码,以防使用函数而不是使用简单的字符串或文件名模式。
通过将"data/raw_external/D_melanogaster.fa.gz"与"data/raw_external/{genome_id}.fa.gz"匹配,Snakemake确定您的get_genome_fasta规则应该能够生成文件"data/raw_external/D_melanogaster.fa.gz",为此,需要为通配符genome_id设置值"D_melanogaster"。这将直接插入日志文件名模式。这也是作为一个wildcards对象的属性提供的,该对象被传递给计算fasta_path param值的函数。在本例中,您使用了一个"lambda函数“,但是您可以通过定义一个标准Python函数来做到这一点:
def set_fasta_path(wildcards):
return config["genomes"][wildcards.genome_id]["fasta"]
# [...]
params:
fasta_path = set_fasta_pathhttps://stackoverflow.com/questions/65854634
复制相似问题