1

这是一个 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}'
    )

在此先感谢您的帮助。

黑蒂卡

4

1 回答 1

2

最后,我找到了一个响应,在 params 指令中使用了 lambda 函数,并在运行中找到了一个条件:

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}'
    )

如果这可以帮助某人...

于 2017-05-07T16:51:35.063 回答