运行 一条规则有条件地输入文件
Run one rule conditionally to the input files
我刚刚开始学习 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 else 结合使用,但我不确定如何)
感谢您的宝贵时间
可能有一些方法可以重新使用规则,但我怀疑它会使代码变得比必要的更复杂。
如果规则 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
我刚刚开始学习 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 else 结合使用,但我不确定如何)
感谢您的宝贵时间
可能有一些方法可以重新使用规则,但我怀疑它会使代码变得比必要的更复杂。
如果规则 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