ska*_*beg 2 python bioinformatics python-3.x snakemake
标准化工作流程中的 Snakemake 规则使用指令运行 Python 脚本script
,例如此模板规则:
rule XXXXX:
input:
...,
output:
....,
params:
...,
conda:
"../envs/python.yaml"
script:
"../scripts/XXXX.py"
Run Code Online (Sandbox Code Playgroud)
然后在脚本中,可以使用snakemake
对象。然而,脚本与该规则紧密耦合,这似乎是一个很大的缺点。
为什么这种方法比使用调用脚本的 shell 的方法更受青睐,例如在本规则中?
rule XXXXX:
input:
...,
output:
....,
params:
absolute_script_path = ..., # get
argument1 = ...,
conda:
"../envs/python.yaml"
shell:
"python {params.absolute_script_path} {input} {params.argument1} > {output}"
Run Code Online (Sandbox Code Playgroud)
在这种方法中,python 脚本与 Snakemake 规则解耦。而且它看起来更有凝聚力,因为调用的参数在规则中很清楚,而不是隐藏在脚本中。我刚刚开始编写 Snakemake 工作流程,所以我只是一个初学者。我不明白为什么第一种方法比第二种方法更受青睐(或在标准化 Snakemake 工作流程中使用)?我错过了什么吗?第二种方法有问题吗?非常感谢您的解答!
就脚本可以通过 和其他指令访问的对象而言,该script
方法更加灵活params
。
如果您遵循该shell
方法,您可能会发现(重新)定义argparse
或其他方法来正确考虑通过 传递的参数很麻烦shell
。它主要是样板文件,但可能会变得有些乏味。
该notebook
指令在需要交互式复制/开发的场景中可能很有用。
总而言之,没有硬性规则,对于给定的工作流程,一种方法可能比其他方法更合适/更方便。
归档时间: |
|
查看次数: |
413 次 |
最近记录: |