{"id":111,"date":"2023-09-02T16:09:47","date_gmt":"2023-09-02T14:09:47","guid":{"rendered":"http:\/\/eines-informatiques.recursos.uoc.edu\/workflows\/?page_id=111"},"modified":"2025-03-09T13:55:12","modified_gmt":"2025-03-09T11:55:12","slug":"2-6-operadores","status":"publish","type":"page","link":"http:\/\/eines-informatiques.recursos.uoc.edu\/workflows\/es\/2-6-operadores\/","title":{"rendered":"2.6. Operadores"},"content":{"rendered":"<p>En la secci\u00f3n anterior hemos visto c\u00f3mo 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 <em>operadores<\/em>. En los<em> scripts<\/em> anteriores hemos visto el operador <em>view<\/em>, pero podemos encontrar operadores de filtrado, combinaci\u00f3n o de operaciones matem\u00e1ticas entre muchos otros. En esta secci\u00f3n veremos algunos ejemplos.<\/p>\n<p>Los operadores pueden introducirse mediante un <em>pipe<\/em> (|), como hemos visto anteriormente, o precedidos por un punto. As\u00ed:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">workflow{\r\n\r\nordenE(pi,queue_ch) | view( )\r\n\r\n}<\/pre>\n<p>es an\u00e1logo a:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">workflow{\r\n\r\nordenE(pi,queue_ch).view( )\r\n\r\n}<\/pre>\n<p>A partir del script anterior eliminaremos el canal <em>valor<\/em> <em>pi<\/em> y nos quedaremos con un ejemplo m\u00e1s sencillo con el canal <em>of<\/em> <em>queue_ch<\/em>. Como ver\u00e9is a continuaci\u00f3n a\u00f1adimos la notaci\u00f3n <em>.view<\/em>, y dentro de este operador introducimos un prefijo, <em>chr<\/em>, y un valor <em>$it<\/em> entre { }. Estos par\u00e9ntesis definen un bloque de c\u00f3digo que va junto y utiliza la nomenclatura de <em>goovy<\/em> (<em>i<\/em>t, de <em>\u00edtem<\/em>) para definir los par\u00e1metros.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">nextflow.enable.dsl=2\r\n\r\nqueue_ch = Channel.of( 1, 3, 5, 7 ).view({\"chr$it\"})\r\n\r\n\r\nprocess ordenE {\r\n\r\n\u00a0\u00a0\u00a0 input:\r\n\r\n \u00a0\u00a0\u00a0\u00a0 val x\r\n\r\n\r\n\u00a0\u00a0\u00a0 output:\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 stdout\r\n\r\n\r\n\"\"\"\r\n\r\n\u00a0\u00a0\u00a0 echo $x\r\n\r\n\"\"\"\r\n\r\n}\r\n\r\nworkflow{\r\n\r\nordenE(queue_ch)\r\n\r\n}<\/pre>\n<p>En este caso el <em>output<\/em> se visualiza en la figura 6.<\/p>\n<figure id=\"attachment_88\" aria-describedby=\"caption-attachment-88\" style=\"width: 932px\" class=\"wp-caption alignnone\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-88 size-full\" src=\"\/wp-content\/uploads\/sites\/7\/2023\/09\/image011.png\" alt=\"\" width=\"932\" height=\"308\" srcset=\"\/wp-content\/uploads\/sites\/7\/2023\/09\/image011.png 932w, \/wp-content\/uploads\/sites\/7\/2023\/09\/image011-300x99.png 300w, \/wp-content\/uploads\/sites\/7\/2023\/09\/image011-768x254.png 768w\" sizes=\"(max-width: 932px) 100vw, 932px\" \/><figcaption id=\"caption-attachment-88\" class=\"wp-caption-text\">Figura 6. Resultado del operador <em>view<\/em> con prefijo.<br \/>Fuente: elaboraci\u00f3n propia.<\/figcaption><\/figure>\n<p>Podemos introducir un filtro en el canal para \u00fanicamente mostrar los valores superiores a 4:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">queue_ch = Channel.of( 1, 3, 5, 7 ).filter { it &gt; 4 }.view({\"chr$it\"})<\/pre>\n<p>Tambi\u00e9n podemos combinar canales utilizando el operador <em>mix<\/em>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">ch1 = channel.of( 1..22 )\r\n\r\nch2 = channel.of( 'X','Y' )\r\n\r\nch3 = channel.of( 'MT' )\r\n\r\n\r\nqueue_ch\u00a0 = ch1.mix(ch2,ch3).view({\"chr$it\"})<\/pre>\n<p>y hacer operaciones como contar el n\u00famero de elementos:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">queue_ch\u00a0 = ch1.mix(ch2,ch3).count().view()<\/pre>\n<p>Las posibilidades de los operadores proporcionan una versatilidad muy grande de poder manipular los datos a analizar.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En la secci\u00f3n anterior hemos visto c\u00f3mo 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\u00f3n o de operaciones matem\u00e1ticas [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"acf":[],"_links":{"self":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/workflows\/es\/wp-json\/wp\/v2\/pages\/111"}],"collection":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/workflows\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/workflows\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/workflows\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/workflows\/es\/wp-json\/wp\/v2\/comments?post=111"}],"version-history":[{"count":5,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/workflows\/es\/wp-json\/wp\/v2\/pages\/111\/revisions"}],"predecessor-version":[{"id":302,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/workflows\/es\/wp-json\/wp\/v2\/pages\/111\/revisions\/302"}],"wp:attachment":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/workflows\/es\/wp-json\/wp\/v2\/media?parent=111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}