首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Snakemake: wildcard.wildcard_name和{通配符}的区别?

Snakemake: wildcard.wildcard_name和{通配符}的区别?
EN

Stack Overflow用户
提问于 2021-01-23 00:44:29
回答 1查看 102关注 0票数 1

我正在学习Snakemake,我对wildcard.wildcard_name{wildcard_name}之间的区别感到困惑。例如,如果这是规则:

代码语言:javascript
复制
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}有什么区别?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-24 01:38:38

首先,您需要知道Snakemake是基于Python的。如果您熟悉这种编程语言的语法,它将有所帮助。

您可以在不同的上下文中使用这两种形式:定义文件名模式的字符串中的{wildcard_name},更“活动”/“定制”的python代码中的wildcards.wildcard_name

inputoutputlog文件名中,在定义这些文件名所遵循的模式时,使用通配符作为{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函数来做到这一点:

代码语言:javascript
复制
def set_fasta_path(wildcards):
    return config["genomes"][wildcards.genome_id]["fasta"]

# [...]

    params:
        fasta_path = set_fasta_path
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65854634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档