首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态分支/管路

动态分支/管路
EN

Stack Overflow用户
提问于 2021-09-22 03:09:51
回答 2查看 44关注 0票数 0

是否可以在snakefile中使用动态分支/管道?

我希望执行以下操作:

代码语言:javascript
复制
A -> B -> D
or
A -> C -> D

取决于配置变量是否为真。

例如:

代码语言:javascript
复制
*(rules.B if config["deblur"] == True else rules.B),

在本例中,它同时运行规则B和C。

我试过了

代码语言:javascript
复制
if config["deblur"] == True:
    rules.B,
else:
    rules.C,

但是这给了我一个语法错误。

在下一条规则中,输入如下所示。

代码语言:javascript
复制
    input:
        qiime_feature_table_input = rules.qiime_deblur.output.qiime_deblur_table if config["deblur"] == "True" else rules.qiime_denoise.output.qiime_denoise_table

谢谢你的帮忙!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-22 07:27:31

由于配置变量的值在运行前就已知,因此在这种情况下不需要动态修改DAG。下面是一个简单的蛇文件,如果config_var为真,它将运行规则a -> b -> d,如果config_var为假,它将运行规则a -> c -> d

代码语言:javascript
复制
config_var = True

rule all:
    input:
        "d/out.txt",

rule a:
    output:
        "a/a.txt",
    shell:
        """
        echo 'a' > '{output}'
        """

rule b:
    input:
        rules.a.output,
    output:
        "b/b.txt",
    shell:
        """
        echo 'b' > '{output}'
        """

rule c:
    input:
        rules.a.output,
    output:
        "c/c.txt",
    shell:
        """
        echo 'c' > '{output}'
        """

rule d:
    input:
        rules.b.output if config_var else rules.c.output,
    output:
        "d/out.txt",
    shell:
        """
        cat '{input}' > '{output}'
        """
票数 1
EN

Stack Overflow用户

发布于 2021-09-22 03:14:07

不确定这是否适用于您的情况,但一种选择是让这两个规则生成相同的文件(它可以是一个虚拟文件),但一次只定义一个带有条件的规则。下面是一个粗略的伪代码:

代码语言:javascript
复制
config_var = True

rule all:
    input: 'test.txt'

if config_var:
    rule B:
         output: 'test.txt'
else:
    rule C:
         output: 'test.txt'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69277701

复制
相关文章

相似问题

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