是否可以在snakefile中使用动态分支/管道?
我希望执行以下操作:
A -> B -> D
or
A -> C -> D取决于配置变量是否为真。
例如:
*(rules.B if config["deblur"] == True else rules.B),在本例中,它同时运行规则B和C。
我试过了
if config["deblur"] == True:
rules.B,
else:
rules.C,但是这给了我一个语法错误。
在下一条规则中,输入如下所示。
input:
qiime_feature_table_input = rules.qiime_deblur.output.qiime_deblur_table if config["deblur"] == "True" else rules.qiime_denoise.output.qiime_denoise_table谢谢你的帮忙!
发布于 2021-09-22 07:27:31
由于配置变量的值在运行前就已知,因此在这种情况下不需要动态修改DAG。下面是一个简单的蛇文件,如果config_var为真,它将运行规则a -> b -> d,如果config_var为假,它将运行规则a -> c -> d:
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}'
"""发布于 2021-09-22 03:14:07
不确定这是否适用于您的情况,但一种选择是让这两个规则生成相同的文件(它可以是一个虚拟文件),但一次只定义一个带有条件的规则。下面是一个粗略的伪代码:
config_var = True
rule all:
input: 'test.txt'
if config_var:
rule B:
output: 'test.txt'
else:
rule C:
output: 'test.txt'https://stackoverflow.com/questions/69277701
复制相似问题