用于分析的 Snakemake 规则,其中为 diff 参数生成单个结果文件,并且参数来自另一个规则输出内容
Snakemake rule for analysis where a single result file is produced for diff parameters, and parameter is coming from another rule output content
我有以下基本的 snakemake 设置:
rule step1:
"""
The output will contain a list of GENEs in a txt file.
"""
input: "input1.txt"
output: "output1.txt"
shell:
"""
analysis1.R {input} {output}
"""
rule step2:
"""
Analysis step2.
"""
input: "input2.txt"
output: "output2.txt"
shell:
"""
analysis2.py {input} {output}
"""
rule step3:
"""
GENE should be coming from the step1 output file, with a GENE name on each
line.
"""
input: rules.step2.output
output: "output3-GENE.txt"
shell:
"""
analysis3.py -i {input} -o {output} -p GENE
"""
我在步骤 1 中为步骤 3 生成了一个包含基因(参数)列表的文件,在步骤 2 中生成了另一个文件。我想做的是 运行 step3 与我在 output1.txt
中的行一样多,其中行的内容是 step3 的参数,它也应该是输出文件名的一部分,但我无法理解它。有任何想法吗?感谢您的帮助!
您可以使用 checkpoints.
如果您知道 step3
文件应生成的文件列表,您可以定义一个 aggregate
规则:
rule aggregate:
input:
# List of files that step3 needs to generate
这样您就可以根据需要 运行 rule step3
多次。
棘手的部分是定义这些文件的列表。那应该是 rule step1
:
结果的函数
def aggregate_input(wildcards):
with checkpoints.rile1.get().output[0].open() as f:
return f.readlines()
rule aggregate:
input:
aggregate_input
在这种情况下,rule step1
应成为检查点:
checkpoint step1:
"""
The output will contain a list of GENEs in a txt file.
"""
input: "input1.txt"
output: "output1.txt"
shell:
"""
analysis1.R {input} {output}
"""
在我的示例中,我将函数 aggregate_input
简化为 return,只是 step1
的输出行。如果您需要更复杂的功能,您可以自己设计一个。
我有以下基本的 snakemake 设置:
rule step1:
"""
The output will contain a list of GENEs in a txt file.
"""
input: "input1.txt"
output: "output1.txt"
shell:
"""
analysis1.R {input} {output}
"""
rule step2:
"""
Analysis step2.
"""
input: "input2.txt"
output: "output2.txt"
shell:
"""
analysis2.py {input} {output}
"""
rule step3:
"""
GENE should be coming from the step1 output file, with a GENE name on each
line.
"""
input: rules.step2.output
output: "output3-GENE.txt"
shell:
"""
analysis3.py -i {input} -o {output} -p GENE
"""
我在步骤 1 中为步骤 3 生成了一个包含基因(参数)列表的文件,在步骤 2 中生成了另一个文件。我想做的是 运行 step3 与我在 output1.txt
中的行一样多,其中行的内容是 step3 的参数,它也应该是输出文件名的一部分,但我无法理解它。有任何想法吗?感谢您的帮助!
您可以使用 checkpoints.
如果您知道 step3
文件应生成的文件列表,您可以定义一个 aggregate
规则:
rule aggregate:
input:
# List of files that step3 needs to generate
这样您就可以根据需要 运行 rule step3
多次。
棘手的部分是定义这些文件的列表。那应该是 rule step1
:
def aggregate_input(wildcards):
with checkpoints.rile1.get().output[0].open() as f:
return f.readlines()
rule aggregate:
input:
aggregate_input
在这种情况下,rule step1
应成为检查点:
checkpoint step1:
"""
The output will contain a list of GENEs in a txt file.
"""
input: "input1.txt"
output: "output1.txt"
shell:
"""
analysis1.R {input} {output}
"""
在我的示例中,我将函数 aggregate_input
简化为 return,只是 step1
的输出行。如果您需要更复杂的功能,您可以自己设计一个。