1

{wildcard} と {param} の値を含めることができるように、.yaml ファイルで snakemake 構成文字列を定義する方法はありますか?その文字列がシェル コマンドで使用されると、{<name>} の値は次のように置き換えられます。 "<名前>" の実際の値は?

たとえば、プログラムに引数として渡される文字列の形式を定義する構成文字列が必要だとします。

RG: "ID:{ID} REP:{REP}"

上記は .yaml ファイル内にあり、ID と REP はワイルドカードであり、シェル コマンドは展開された文字列を引数としてプログラムに渡します。

4

4 に答える 4

1

はい、params ラムダ関数を使用します。

MACBOOK> cat paramsArgs.yaml
A: "Hello world"
B: "Message: {config[A]}  ID: {wildcards.ID}   REP: {wildcards.REP}"

MACBOOK> cat paramsArgs
configfile: "paramsArgs.yaml"

rule all:
    input: "ID2307_REP12.txt"

def paramFunc(key, wildcards, config):
    return config[key].format(wildcards=wildcards, config=config)

rule:
    output: "ID{ID}_REP{REP}.txt"
    params: A=config["A"], B=lambda wildcards: paramFunc("B", wildcards, config)
    shell:
        """
        echo 'A is {params.A}' > {output}
        echo 'B is {params.B}' >> {output}
        """

MACBOOK> snakemake -s paramsArgs
Provided cores: 1
Rules claiming more threads will be scaled down.
Job counts:
    count   jobs
    1   2
    1   all
    2

rule 2:
    output: ID2307_REP12.txt
    jobid: 1
    wildcards: REP=12, ID=2307

Finished job 1.
1 of 2 steps (50%) done

localrule all:
    input: ID2307_REP12.txt
    jobid: 0

Finished job 0.
2 of 2 steps (100%) done

MACBOOK> cat ID2307_REP12.txt 
A is Hello world
B is Message: Hello world  ID: 2307   REP: 12
于 2017-08-08T20:09:44.210 に答える