使用命令行参数覆盖 Nextflow 参数

Overriding Nextflow Parameters with Commandline Arguments

给出以下 nextflow.config

google {
  project = "cool-project"
  region = "europe-west4"
            
  lifeSciences {
    bootDiskSize = "200 GB"
    debug = true
    preemptible = true
  }
}

是否可以使用命令行参数覆盖这些设置中的一项或多项。比如我想指定不使用抢占式机器,是否可以这样:

nextflow run main.nf -c nextflow.config --google.lifeSciences.preemptible false

?

可以使用 Nextflow 的 command line interface 通过在参数名称前加上双破折号来覆盖管道参数。例如,将以下内容放入名为 'test.nf' 的文件中:

#!/usr/bin/env nextflow

params.greeting = 'Hello'

names = Channel.of( "foo", "bar", "baz" )

process greet {

    input:
    val name from names

    output:
    stdout result

    """
    echo "${params.greeting} ${name}"
    """
}

result.view { it.trim() }

并且运行它使用:

nextflow run -ansi-log false test.nf --greeting 'Bonjour'

结果:

N E X T F L O W  ~  version 20.10.0
Launching `test.nf` [backstabbing_cajal] - revision: 431ef92cef
[46/22b4f0] Submitted process > greet (1)
[ca/32992c] Submitted process > greet (3)
[6e/5880b0] Submitted process > greet (2)
Bonjour bar
Bonjour foo
Bonjour baz

这适用于管道参数,但 AFAIK 无法像您在命令行中描述的那样直接覆盖执行程序配置。但是,您可以只参数化这些值并像上面描述的那样在命令行上设置它们。例如,在您的 nextflow.config:

params {

  gc_region = false
  gc_preemptible = true

  ...
}

profiles {

  'test' {
    includeConfig 'conf/test.config'
  }

  'google' {
    includeConfig 'conf/google.config'
  }

  ...
}

并且在名为 'conf/google.config' 的文件中:

google {
  project = "cool-project"
  region = params.gc_region
            
  lifeSciences {
    bootDiskSize = "200 GB"
    debug = true
    preemptible = params.gc_preemptible
  }
}

那么你应该能够以通常的方式覆盖这些:

nextflow run main.nf -profile google --gc_region "europe-west4" --gc_preemptible false

请注意,您还可以通过用逗号分隔配置文件名称来指定多个 configuration profiles

nextflow run main.nf -profile google,test ...