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.
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.