2. Nextflow

2.6. Operadores

En la sección anterior hemos visto cómo crear canales para dirigir los datos entre los procesos. Para poder modificar el contenido o el comportamiento de un canal, Nexflow ha creado lo que se denominan operadores. En los scripts anteriores hemos visto el operador view, pero podemos encontrar operadores de filtrado, combinación o de operaciones matemáticas entre muchos otros. En esta sección veremos algunos ejemplos.

Los operadores pueden introducirse mediante un pipe (|), como hemos visto anteriormente, o precedidos por un punto. Así:

workflow{

ordenE(pi,queue_ch) | view( )

}

es análogo a:

workflow{

ordenE(pi,queue_ch).view( )

}

A partir del script anterior eliminaremos el canal valor pi y nos quedaremos con un ejemplo más sencillo con el canal of queue_ch. Como veréis a continuación añadimos la notación .view, y dentro de este operador introducimos un prefijo, chr, y un valor $it entre { }. Estos paréntesis definen un bloque de código que va junto y utiliza la nomenclatura de goovy (it, de ítem) para definir los parámetros.

nextflow.enable.dsl=2

queue_ch = Channel.of( 1, 3, 5, 7 ).view({"chr$it"})


process ordenE {

    input:

      val x


    output:

      stdout


"""

    echo $x

"""

}

workflow{

ordenE(queue_ch)

}

En este caso el output se visualiza en la figura 6.

Figura 6. Resultado del operador view con prefijo.
Fuente: elaboración propia.

Podemos introducir un filtro en el canal para únicamente mostrar los valores superiores a 4:

queue_ch = Channel.of( 1, 3, 5, 7 ).filter { it > 4 }.view({"chr$it"})

También podemos combinar canales utilizando el operador mix:

ch1 = channel.of( 1..22 )

ch2 = channel.of( 'X','Y' )

ch3 = channel.of( 'MT' )


queue_ch  = ch1.mix(ch2,ch3).view({"chr$it"})

y hacer operaciones como contar el número de elementos:

queue_ch  = ch1.mix(ch2,ch3).count().view()

Las posibilidades de los operadores proporcionan una versatilidad muy grande de poder manipular los datos a analizar.