擅长:python、mysql、java
<p>作为user1829905的<a href="https://stackoverflow.com/a/40511148/1878788">suggested</a>,我曾试图使<code>get_raw_data*</code>规则成为一个规则,但由于该规则的输出是可变的,所以失败了。在</p>
<p>但是,我可以将<code>run_tophat*</code>规则合并为一个:它们具有相同的输出。在</p>
<pre><code>rule run_tophat:
input:
transcriptome = OPJ(annot_dir, "dmel-all-r5.9.gff"),
fq = lib2fq,
output:
junctions = OPJ(output_dir, "{lib}", "junctions.bed"),
bam = OPJ(output_dir, "{lib}", "accepted_hits.bam"),
</code></pre>
<p>我尝试使用以下函数生成此融合规则的输入:</p>
^{pr2}$
<p>但此尝试失败,返回<code>InputFunctionException</code>:</p>
^{3}$
<p>然而,让第二条规则的输入明确地定义为第一条规则的输出,就解决了这个问题。在</p>
<pre><code>def lib2fq(wildcards):
lib = wildcards.lib
if lib in lib2raw_single_end:
return rules.get_raw_data_single_end.output
else:
return rules.get_raw_data.output
</code></pre>
<p>我不完全明白为什么会有这种不同。在</p>