7. Operadores¶
Operadores são métodos para conectar canais, transformar valores emitidos por canais ou executar regras próprias em canais.
Existem sete grupos de operadores descritos em detalhe na Documentação do Nextflow, estes são:
- Operadores de filtragem
- Operadores de transformação
- Operadores de divisão
- Operadores de combinação
- Operadores de bifurcação
- Operadores matemáticos
- Outros operadores
7.1 Exemplo básico¶
Clique no ícone para ver explicações do código.
- Cria um canal de fila que emite quatro valores
- Cria um novo canal, transformando cada número ao quadrado
- Imprime o conteúdo do canal
Para implementar funcionalidades específicas operadores também podem ser encadeados. Então, o código anterior também pode ser escrito assim:
7.2 Operadores básicos¶
Agora iremos explorar alguns dos operadores mais comuns.
7.2.1 view()
¶
O operador view
imprime os itens emitidos por um canal para o terminal, acrescentando um caractere de quebra de linha após cada item. Por exemplo:
Você também pode especificar uma clausura para personalizar como os itens são impressos. Por exemplo:
7.2.2 map()
¶
O operador map
aplica uma função de sua escolha em cada item emitido por um canal
e retorna os items obtidos como um novo canal. A função aplicada é chamada de função
de mapeamento e é expressa com uma clausura, como demonstrado no exemplo abaixo:
Um map
pode associar uma tupla genérica a cada elemento e pode conter qualquer
tipo de dado.
Exercise
Use fromPath
para criar um canal emitindo os arquivos fastq que correspondam à expressão data/ggal/*.fq
, então use map
para retornar um par contendo o nome e o caminho para o arquivo, e, por fim, use view
para imprimir o canal resultante.
7.2.3 mix()
¶
O operador mix
combina os itens emitidos por dois (ou mais) canais em um único canal.
Warning
Os itens no canal resultante possuem a mesma ordem dos seus respectivos canais originais. No entanto, não há garantia que o elemento do segundo canal é acrescentado ao final dos elementos do primeiro canal. Como se pode observar acima, o elemento a
foi impresso antes de 3
.
7.2.4 flatten()
¶
O operador flatten
transforma um canal de maneira que cada tupla é achatada, isto é, cada entrada é emitida como um único elemento pelo canal resultante.
7.2.5 collect()
¶
O operador collect
coleta todos os itens emitidos por um canal em uma lista e retorna o objeto como uma única emissão.
Isto imprime o valor:
Info
O resultado do operador collect
é um canal de valor.
7.2.6 groupTuple()
¶
O operador groupTuple
coleta as tuplas (ou listas) de valores emitidos pelo canal de entrada, agrupando os elementos que possuem a mesma chave. Por fim, ele emite uma nova tupla para cada chave distinta.
Por exemplo:
Esse operador é útil para processar um grupo, juntando elementos que possuem uma propriedade ou uma chave em comum.
Exercise
Use fromPath
para criar um canal emitindo todos os arquivos no diretório data/meta/
, então use map
para associar o prefixo baseName
a cada arquivo. Por fim, agrupe todo os arquivos que possuem o mesmo prefixo.
7.2.7 join()
¶
O operador join
cria um canal que combina os itens emitidos por dois canais que possuam uma chave em comum. Por padrão, a chave é definida como o primeiro elemento
em cada item emitido.
Note
Perceba como P está ausente no resultado final.
7.2.8 branch()
¶
O operador branch
permite que você envie os itens emitidos por um canal de entrada para um ou mais canais de saída.
O critério de seleção de cada canal de saída é definido especificando uma clausura que forneça uma ou mais expressões booleanas, cada uma das quais é identificada por um rótulo único. Para a primeira expressão verdadeira, o item é ligado a um canal nomeado com o rótulo. Por exemplo:
Info
O operador branch
retorna um objeto multi-canal (isto é, uma variável que possui mais de um canal).
Note
No exemplo acima, o que aconteceria com um valor igual a 10? Para lidar com isso, você pode usar >=
.
7.3 Outros recursos¶
Veja a documentação de operadores no site oficial do Nextflow.