如何解决用于分析的 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
"""
我在 step1 中为 step3 生成了一个包含基因(参数)列表的文件,在 step2 中生成了另一个文件。我想做的是运行 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
以仅返回 step1
的输出行。如果您需要更复杂的功能,您可以自己设计。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。