Python Snakemake:如何在config.yml文件中保存和访问示例详细信息?
有谁能帮助我理解,当样本名称未写入snakemake工作流时,是否可以从config.yml文件访问样本详细信息?这样我就可以对不同的项目重复使用工作流,并且只调整配置文件。让我举个例子: 我有四个样本属于同一类,应该一起分析。它们被称为样本1-4。每个示例都附带了一些更多的信息,但为了保持简单,让我们假设它只是一个名称标签,如S1、S2等 我的config.yml文件可能如下所示:Python Snakemake:如何在config.yml文件中保存和访问示例详细信息?,python,snakemake,Python,Snakemake,有谁能帮助我理解,当样本名称未写入snakemake工作流时,是否可以从config.yml文件访问样本详细信息?这样我就可以对不同的项目重复使用工作流,并且只调整配置文件。让我举个例子: 我有四个样本属于同一类,应该一起分析。它们被称为样本1-4。每个示例都附带了一些更多的信息,但为了保持简单,让我们假设它只是一个名称标签,如S1、S2等 我的config.yml文件可能如下所示: samples: ["sample1","sample2","sample3","sample4"] samp
samples: ["sample1","sample2","sample3","sample4"]
sample1:
tag: "S1"
sample2:
tag: "S2"
sample3:
tag: "S3"
sample4:
tag: "S4"
下面是我们使用的snakefile的一个示例:
configfile: "config.yaml"
rule final:
input: expand("{sample}.txt", sample=config["samples"])
rule rule1:
output: "{sample}.txt"
params: tag=config["{sample}"]["tag"]
shell: """
touch {output}
echo {params.tag} > {output}
rule1试图做的是创建一个以每个样本命名的文件,该文件保存在配置文件的samples
变量中。到目前为止没有问题。然后,我想将示例标记打印到该文件中。正如上面所写的代码,运行snakemake
将失败,因为config[“{sample}]
将在配置文件中查找不存在的{sample}
变量,因为我需要将其替换为运行规则的当前示例,例如sample1
有人知道这是否有可能做到,如果有,我如何做到
理想情况下,我希望进一步压缩这些信息(见下文),但这还远远不够
samples:
sample1:
tag: "S1"
sample2:
tag: "S2"
sample3:
tag: "S3"
sample4:
tag: "S4"
我建议使用制表符分隔的文件来存储样本信息 sample.tab:
Sample Tag
1 S1
2 S2
您可以将此文件的路径存储在配置文件中,并在Snake文件中读取它
config.yaml:
sample_file: "sample.tab"
蛇形档案:
configfile: "config.yaml"
sample_file = config["sample_file"]
samples = read_table(sample_file)['Sample']
tags = read_table(sample_file)['Tag']
这样,您就可以对任意数量的样本和任意数量的列重复使用工作流
除此之外,在Snakemake中,通常你可以通过加倍它们来避开花括号,也许你可以试试
祝你好运 在
params
部分,您需要提供一个通配符的函数。对工作流的以下修改似乎有效:
configfile: "config.yaml"
rule final:
input: expand("{sample}.txt", sample=config["samples"])
rule rule1:
output:
"{sample}.txt"
params:
tag = lambda wildcards: config[wildcards.sample]["tag"]
shell:
"""
touch {output}
echo {params.tag} > {output}
"""
是的,单独的样本表是更具伸缩性的方式。请注意,您可以通过pandas:pd.read_table(config[“samples”])
在一行程序中读取它。请参见示例。关于分离样本和配置信息的好观点。目前,我几乎没有任何设置保存在配置文件中,但随着我扩展工作流,我确信将这些内容分开会变得更加明显。Snakemake不会替换Snakemake文件任何部分中的大括号语句。仅在shell命令和输入/输出/参数中以普通字符串形式给出。在您的情况下,您需要编写tag=lambda通配符:config[wildcards.sample][“tag”]
。非常好,谢谢!