Snakemake: образцы с подпунктами, как их поймать?

Вот краткий пример файла config.yaml:

samples:
  sample1:
    stranded: True
  sample2:
    stranded: False

Как видите, у каждого образца есть подпункт (на самом деле их несколько). Но я не знаю, как их поймать. Мой змеиный файл:

configfile: "config.yaml"

rule all:
  input:
    expand("output/{sample}.bam", sample=config['samples']),

rule one:
  input:
    "input/{sample}.bam",
  output:
    "output/{sample}.bam",
  run:
    if config['samples']["{sample}"]['stranded']: # How catch stranded value ?
      option = "--stranded",
    shell(
      'some_command '
      ' {option}'
      ' {input} > {output}'
    )

Заранее спасибо за помощь.

Хетика


person hetica    schedule 07.05.2017    source источник


Ответы (1)


наконец, я нашел ответ, используя лямбда-функцию в инструкции params и условие запуска:

configfile: "config.yaml"

rule all:
  input:
    expand("output/{sample}.bam", sample=config['samples']),

rule one:
  input:
    "input/{sample}.bam",
  output:
    "output/{sample}.bam",
  params:
    stranded = lambda wildcards: config['samples'][wildcards.sample]['stranded'],
  run:
    stranded = "--stranded" if params.stranded else ''
    shell(
        'echo '
        + stranded +
        ' {input} > {output};\n'
        'touch {output}'
    )

Если это может помочь кому-то...

person hetica    schedule 07.05.2017