我刚刚开始学习Snakemake,所以这可能是一个幼稚的问题。 我需要在管道的两个不同时刻启动一条规则,使用不同的输入并产生不同的输出。
让我举一个愚蠢的例子。假设我有3条规则:
rule A:
input:
"data/sample.1.txt"
output:
"data/sample.2.sorted.txt"
shell:
"somethingsomething sort {input}"
rule B:
input:
"data/sample.2.sorted.txt"
output:
"data/sample.3.man.txt"
shell:
"somethingsomething manipulate {input}"
rule C:
input:
"data/sample.3.man.txt"
output:
"data/sample.4.man.sorted.txt"
shell:
"somethingsomething sort {input}"
在此示例中,管道执行A> B> C,A和C完全相同,但是一个使用文件1并输出2,另一个使用3并输出4。仅有一个排序规则,所以管道A> B> A? (可能有一些使用通配符的方法,也许与if结合使用,但我不确定如何)
谢谢您的时间
答案 0 :(得分:1)
也许有一些方法可以重用规则,但是我怀疑这会使代码变得更加复杂。
如果规则A和C的shell调用相同,并且您不想复制和粘贴代码,只需将代码放在变量中并重新使用该变量:
sorter= "somethingsomething sort {input}"
rule A:
input:
"data/sample.1.txt"
output:
"data/sample.2.sorted.txt"
shell:
sorter
rule B:
input:
"data/sample.2.sorted.txt"
output:
"data/sample.3.man.txt"
shell:
"somethingsomething manipulate {input}"
rule C:
input:
"data/sample.3.man.txt"
output:
"data/sample.4.man.sorted.txt"
shell:
sorter