Snakemake›从配置文件访问多个键

时间:2019-05-14 15:23:53

标签: snakemake

我对正确处理配置文件有疑问。我现在试图解决我的问题几天,但是以最好的意愿,我只是找不到解决方法。我知道这个问题可能与这里的所有其他问题都非常相似,我确实尝试使用它们-但我并没有真正理解它。我希望,当我解决此问题时,关于蛇形制作原理的一些事情会更加清楚。

我只是切换到snakemake,我以为我可以轻松转换bash脚本。为了熟悉snakemake,我开始尝试一个简单的数据处理管道。我知道我可以解决问题,同时在蛇文件中定义每个变量。但是我想使用一个外部配置文件。 首先是说,为了更好地理解,我决定只发布我认为可以使用的代码。我已经使用了“ rule all”和“ lambda”功能的不同版本,但是到目前为止没有任何效果,这只会造成混乱。对于为什么无法正常工作,我确实感到有些尴尬和困惑。变量与键不同,因为我已经拥有一个重新定义变量的版本,例如: $ sample = config [“ samples”]

我非常感谢示例代码。

我想拥有的是:

    The config file:
    samples:
    - SRX1232390
    - SRX2312380
    names:
    - SomeData
    - SomeControl
    adapters:
    - GATCGTAGC
    - GATCAGTCG

然后我想我可以像其他变量一样调用这些键。

     rule download_fastq:  
        output:
            "fastq/{name}.fastq.gz"
        shell:
            "fastq-dump {wildcards.sample} > {output}"

以后会有更多规则,所以我认为对于他们来说,我也只需要一个键:

       rule trimming_cutadapt: 
           input:
              "fastq/{name}.fastq"
           output:
             "ctadpt_{name}.fastq"
           shell:
            "cutadapt -a {adapt}"

我还尝试了一些配置文件,如下所示: 样本:

    Somedata: SRX1232131
    SomeControl: SRX12323

但是最后我也没有找到最终的解决方案,我也不知道该如何添加第三个“变量”。 我希望以某种方式可以理解我想要的东西。如果有人可以帮助我,那将是非常棒的。

编辑:

好的-我重新编写了代码,并尝试深入研究所有内容。在这种情况下,我担心我的理解力不足以将我阅读的内容联系起来。我非常感谢一些提示,这些提示可能会帮助我理解自己的困惑。 首先:我决定在配置步骤中执行此操作,而不是尝试从管道下载数据。我现在尝试了两个不同的版本:

基于this的答案,我尝试了第一版。我喜欢带有两个文件的版本。但是,我现在陷入了如何处理变量的问题中,例如将它们与lambda函数一起使用,或者通常会写“ config [“ sample”]”的所有内容。 因此,我的问题是我不了解如何继续进行操作,也不知道如何正确使用语法来调用变量。

    #version one
configfile: "config.yaml"
sample_file = config["sample_file"]

import pandas as pd

sample = pd.read_table(sample_file)['samples']
adapt = pd.read_table(sample_file)['adapters']

rule trimming_cutadapt: 
        input:
            data=expand("../data/{sample}.fastq", name = pd.read_table(sample_file)['names']),
            lambda wildcards: ??? 
        output:
            "trimmed/ctadpt_{sample}.fastq"
        shell:
            "cutadapt -a {adapt}"

因此,我回过头来尝试了解使用和定义通配符。因此(除其他外),我研究了约翰尼斯的示例snakefile和示例rules。当然也要加入man中。哦,还有关于zip功能的内容。

至少我不会再收到一个错误,因为它无法处理通配符或其他任何内容。现在它什么都不做。而且我找不到原因,因为我没有任何信息。另外,我标记了一些我不理解的观点。

    #version two
configfile: "config_ChIP_Seq_Pipeline.yaml"

rule all:
    input: 
        expand("../data/{sample}.fastq", sample=config["samples"])
#when to write the lambda or the expand in a rule all and when into the actual rule?        
rule trimming_cutadapt: 
        input:
            "../data/{sample}.fastq"
        params: 
            adapt=lambda wildcards: config[wildcards.sample]["adapt"] #why do I have to write .samle? when I have to use wildcard.XXX in the shell part?
        output:
            "trimmed/ctadpt_{sample}.fastq"
        shell:
            "cutadapt -a {params.adapt}"

作为测试文件,我使用了this one。 我的配置文件在版本1中:

sample_file: "sample.tab"

和标签文件:

samples    names     adapters   
test_1     input     GACCTA

和版本2中的配置文件:

samples:
- test_1

adapt:
- GTACGTAG

感谢您的帮助和患者!

欢呼

1 个答案:

答案 0 :(得分:0)

您可以查看this post,以了解如何存储和访问示例信息。

然后,您可以查看Snakemake文档here,尤其是zip函数,这可能也对您有所帮助。