当前位置:  开发笔记 > 编程语言 > 正文

在snakemake中使用多个参数

如何解决《在snakemake中使用多个参数》经验,为你挑选了2个好方法。

我刚刚开始使用snakemake并且想知道在同一个文件上运行一组参数的"正确"方法是什么以及这对于规则的链接有什么作用?

因此,例如,当我想要多个规范化方法时,接下来让我们说一个具有不同数量的k个聚类的聚类规则.这样做的最佳方法是什么,以便运行所有组合?

我开始这样做:

INFILES = ["mytable"]

rule preprocess:
input:
    bam=expand("data/{sample}.csv", sample=INFILES, param=config["normmethod"])

output:
    bamo=expand("results/{sample}_pp_{param}.csv", sample=INFILES, param=config["normmethod"])

script:
    "scripts/preprocess.py"

然后通过以下方式调用脚本:

snakemake --config normmethod =中位数

但是,在工作流程的后期,这并没有真正扩展到更多选项.例如,我如何自动合并这些选项?

normmethods= ["Median", "Quantile"]
kclusters= [1,3,5,7,10]

Pereira Hugo.. 6

你在规则中使用expand()函数做得很好.

对于参数,我建议使用包含所有参数的配置文件.Snakemake适用于YAML和JSON文件.在这里,您可以获得有关这两种格式的所有信息:

YAML:http://docs.ansible.com/ansible/YAMLSyntax.html

JSON:http://json.org/example.html

在你的情况下,你只需要在YAML文件中写这个:

INFILES : "mytables"

normmethods : ["Median", "Quantile"] 
or
normmethods : - "Median"
              - "Quantile"

kclusters : [1,3,5,7,10]
or
kclusters : - 1
            - 3
            - 5
            - 7
            - 10

像这样写下你的规则:

rule preprocess:
input:
    bam = expand("data/{sample}.csv",
                 sample = config["INFILES"])

params :
    kcluster = config["kcluster"]

output:
    bamo = expand("results/{sample}_pp_{method}_{cluster}.csv",
                  sample = config["INFILES"],
                  method = config["normmethod"],
                  cluster = config["kcluster"])

script:
    "scripts/preprocess.py {input.bam} {params.kcluster}"

那你只需要像这样吃午饭:

snakemake --configfile  path/to/config.yml

对于与其他参数一起运行,您将不得不修改配置文件,而不是修改snakefile(减少错误),这对于可读性和代码美感更好.

编辑:

  rule preprocess:
    input:
      bam = "data/{sample}.csv"

只是为了纠正我自己的错误,你不需要在输入上使用expand,因为你只想运行规则一个文件.csv一个.所以只要把通配符放在这里,Snakemake就会尽力而为.



1> Pereira Hugo..:

你在规则中使用expand()函数做得很好.

对于参数,我建议使用包含所有参数的配置文件.Snakemake适用于YAML和JSON文件.在这里,您可以获得有关这两种格式的所有信息:

YAML:http://docs.ansible.com/ansible/YAMLSyntax.html

JSON:http://json.org/example.html

在你的情况下,你只需要在YAML文件中写这个:

INFILES : "mytables"

normmethods : ["Median", "Quantile"] 
or
normmethods : - "Median"
              - "Quantile"

kclusters : [1,3,5,7,10]
or
kclusters : - 1
            - 3
            - 5
            - 7
            - 10

像这样写下你的规则:

rule preprocess:
input:
    bam = expand("data/{sample}.csv",
                 sample = config["INFILES"])

params :
    kcluster = config["kcluster"]

output:
    bamo = expand("results/{sample}_pp_{method}_{cluster}.csv",
                  sample = config["INFILES"],
                  method = config["normmethod"],
                  cluster = config["kcluster"])

script:
    "scripts/preprocess.py {input.bam} {params.kcluster}"

那你只需要像这样吃午饭:

snakemake --configfile  path/to/config.yml

对于与其他参数一起运行,您将不得不修改配置文件,而不是修改snakefile(减少错误),这对于可读性和代码美感更好.

编辑:

  rule preprocess:
    input:
      bam = "data/{sample}.csv"

只是为了纠正我自己的错误,你不需要在输入上使用expand,因为你只想运行规则一个文件.csv一个.所以只要把通配符放在这里,Snakemake就会尽力而为.



2> Shiping..:

好像你没有将params传递给你的脚本.怎么样以下的东西?

import re
import os
import glob
normmethods= ["Median", "Quantile"] # can be set from config['normmethods']    
kclusters= [1,3,5,7,10]             # can be set from config['kclusters']
INFILES = ['results/' + re.sub('\.csv$', '_pp_' + m + '-' + str(k) + '.csv', re.sub('data/', '', file)) for file in glob.glob("data/*.csv") for m in normmethods for k in kclusters]

rule cluster:
    input: INFILES

rule preprocess:
    input:
        bam="data/{sample}.csv"
    output:
        bamo="results/{sample}_pp_{m}-{k}.csv"
    run:     
        os.system("scripts/preprocess.py %s %s %s %s" % (input.bame, output.bamo, wildcards.m, wildcards.k))

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有