YAML 配置
这与 YAML 文件的嵌套有关,请参阅示例 here。
config["samples"] 请求将返回“A”和“B”。我是我的头我认为它返回一个列表,但我对变量类型并不积极。
使用此处列出的配置文件:
https://snakemake.readthedocs.io/en/latest/tutorial/advanced.html
您可以链接到以下 YAML 配置文件,采用 YAML 格式。
settings/config.yaml:
samples:
A
B
或
settings/config.yaml:
sampleID:
123
124
125
baseDIR:
data
使用 YAML 配置访问的结果调用
蛇文件:
configfile: "settings/config.yaml"
rule all:
input:
expand("{baseDIR}/{ID}.bam", baseDIR=config["baseDIR"], ID=config["sampleID"]),
rule fastq2bam:
input:
expand("{{baseDIR}}/{{ID}}.{readDirection}.fastq", readDirection=['1','2'])
output:
"{baseDIR}/{ID}.bam"
#Note different number of {}, 1 for wildcards not in expand.
#Equivalent line with 'useless' expand call would be:
#expand("{{baseDIR}}/{{ID}}.bam")
shell:
"""
bwa mem {input[0]} {input[1]} > {output}
"""
虚拟示例,只是试图举例说明不同字符串和配置变量的使用。我在 fastq2bam 规则中使用通配符。通常,我只使用配置变量在我的规则“全部”中进行设置,如果可能,这是最佳实践。我不能说 shell 调用是否真的适用于 bwa mem,但我想你明白我的意思了。
可以看到更大版本的 Snakefile here
配置文件设置好后,要引用其中的任何内容,请使用“config”。它可用于根据需要深入访问 YAML。在这里,我将降低 3 个假设级别,如下所示:
hypothetical_var = config["yamlVarLvl1"]["yamlVarLvl2"]["yamlVarLvl3"]
等于(我对打字不持肯定态度,我认为它会转换为字符串)
hypothetical_var = ['124', '125', '126', '127', '128', '129']
如果 YAML 是:
yamlVarLvl1:
yamlVarLvl2:
yamlVarLvl3:
'124'
'125'
'126'
'127'
'128'
'129'
代码组织
Python 和 Snakemake 代码大部分可以在某些地方交错。我建议不要这样做,因为它会使代码难以维护。由用户决定如何实现这一点。例如,使用 run 或 shell 指令会改变访问变量的方式。
YAML 和 JSON 文件是首选的配置变量文件,因为我相信它们为变量的编辑和命令行界面覆盖提供了一些支持。如果它是使用外部导入的 python 变量实现的,这将不会那么干净。它也帮助我的大脑,知道 python 文件做事,YAML 文件存储东西。
YAML 始终是一个外部文件,但是...
- 如果您使用的是单个 Snakefile,请将支持的 python 放在顶部?
- 如果您使用的是多文件系统,请考虑将支持的 python 脚本外部化。
教程
我认为完美的小插图很难设计。我正在尝试向我的团队介绍 Snakemake,我有超过 40 页的个人书面文档,我提供了三个 1 小时以上的演示文稿和 PowerPoint 幻灯片,我几乎阅读了整个 ReadTheDocs.io Snakemake 手册,我只是最近完成了其他resources的列表,但是,我还在学习呢!
旁注,我发现这个tutorial 也很好。
这是否提供了足够的上下文?