首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >规则输入中的snakemake if else语句

规则输入中的snakemake if else语句
EN

Stack Overflow用户
提问于 2022-06-20 12:24:40
回答 1查看 78关注 0票数 2

对于snakemake,我希望根据布尔值在规则中有不同的输入(包括通配符)。

我试过:

代码语言:javascript
复制
rule quantify:
    input:
        if trimmed_fastq:
            forward = path_trimmed_fastq + "/{sample}_R1_val_1.fq.gz",
            rev = path_trimmed_fastq + "/{sample}_R2_val_2.fq.gz"
        else:
            forward = fastq_path + "/{sample}_R1.fastq.gz",
            rev = fastq_path + "/{sample}_R2.fastq.gz"

但是它给了我一个“无效的语法”错误,我认为它不喜欢如果在输入中的其他语句,有人知道如何解决这个问题吗?

我知道我可以有两个不同的"quantify“和"quantify_trimmed”规则,其中包含if there语句,但我想知道是否有更优雅的解决方案。

谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-20 16:45:52

实际上,在输入中不能有if..else语句。相反,可以使用函数来实现您想要的结果:

代码语言:javascript
复制
def getInputFilesForQuantify(wildcards):
    files = dict()
    if(trimmed_fastq):
        files["forward"] = os.path.join(path_trimmed_fastq,wildcards.sample,"_R1_val_1.fq.gz")
        files["rev"] = os.path.join(path_trimmed_fastq,wildcards.sample,"_R2_val_2.fq.gz")
    else:
        files["forward"] = os.path.join(fastq_path,wildcards.sample,"_R1.fastq.gz")
        files["rev"] = os.path.join(fastq_path,wildcards.sample,"_R2.fastq.gz")
    return files

rule quantify:
    input: unpack(getInputFilesForQuantify)
    output: ....

注意:

这里使用的是将function.

  • unpack的参数传递给
  • 通配符,因为如果需要对输入命名,则返回一个字典。否则,返回一个简单的文件列表。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72686943

复制
相关文章

相似问题

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