es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El flujo de trabajo Nextflow incluye dinámicas y salida.

Estoy intentando usar inclusiones dinámicas pero tengo problemas para manejar los archivos de salida:

/* 
 * habilita los módulos 
 */
nextflow.enable.dsl = 2

<p>incluya { requestData } de './módulos/obtener<em>datosxapi</em>'
incluya { uniqueActors } de './módulos/actores<em>unicos'
incluya { compileJson } de './módulos/actores</em>unicos'

si (params.user<em>algo) {
    incluya { userAlgo } de params.user</em>algo
}

flujo de trabajo {
    dataChannel = Canal.desde("datos<em>xapi.json")
    requestData(dataChannel)
    uniqueActors(requestData.out.channel</em>data)</p>

<pre><code>si (params.user_algo) {
    user_algo = userAlgo(requestData.out.channel_data)
} else {
    user_algo = null
}

output_json = [user_algo, uniqueActors.out]
// Filtrar salida
Canal.desdeLista(output_json)
    .filter{ it != null }            <--- problema aquí
    .map{ archivo(it) }
    .set{jsonFiles}

compileJson(jsonFiles)
</code></pre>

<p>}

El problema es que userAlgo puede cargarse dinámicamente. Y no sé cómo puedo ocuparme de ello. Con esta solución, obtengo un error Unknown method invocationgetFileSystemon ChannelOut type.

Tags:  

Answer

  1. Avatar for davy.ai

    El problema está en la línea .filter{ it != null }. Dado que user_algo es un módulo dinámico opcional, puede generar o no algún resultado, lo que significa que output_json puede contener un valor null. La función de filtro elimina cualquier valor null de la lista output_json, pero esto causa un error al crear el objeto de archivo porque file (null) no es una entrada válida.

    Para solucionar este problema, puede utilizar la función mapNotNull en lugar de filter para crear una nueva lista que contenga solo valores no nulos. Aquí está el código actualizado:

    /* 
     * habilita los módulos 
     */
    nextflow.enable.dsl = 2
    
    include { requestData } from './modules/get_xapi_data'
    include { uniqueActors } from './modules/unique_actors'
    include { compileJson } from './modules/unique_actors'
    
    if (params.user_algo) {
        include { userAlgo } from params.user_algo
    }
    
    workflow {
        dataChannel = Channel.from("xapi_data.json")
        requestData(dataChannel)
        uniqueActors(requestData.out.channel_data)
    
        user_algo = null
        if (params.user_algo) {
            user_algo = userAlgo(requestData.out.channel_data)
        }
    
        output_json = [user_algo, uniqueActors.out]
        // Filtra el resultado
        output_json
            .mapNotNull{ it }
            .map{ file(it) }
            .set{jsonFiles}
    
        compileJson(jsonFiles)
    }
    

    En el código actualizado, primero establecemos user_algo en null. Si se proporciona el parámetro params.user_algo, cargamos el módulo y establecemos user_algo en el resultado del módulo. Luego creamos una lista output_json con user_algo y uniqueActors.out. Finalmente, utilizamos mapNotNull para crear una nueva lista que contenga solo valores no nulos, y luego mapeamos cada elemento a un objeto de archivo.

    Esto debería solucionar el problema con el error “Unknown method invocation ‘getFileSystem’ on ChannelOut type”.

Comments are closed.