Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Snakemake:如何在config.yml文件中保存和访问示例详细信息?_Python_Snakemake - Fatal编程技术网

Python Snakemake:如何在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

有谁能帮助我理解,当样本名称未写入snakemake工作流时,是否可以从config.yml文件访问样本详细信息?这样我就可以对不同的项目重复使用工作流,并且只调整配置文件。让我举个例子:

我有四个样本属于同一类,应该一起分析。它们被称为样本1-4。每个示例都附带了一些更多的信息,但为了保持简单,让我们假设它只是一个名称标签,如S1、S2等

我的config.yml文件可能如下所示:

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”]
。非常好,谢谢!