#nextflow
#nextflow
Вопрос:
Я пытаюсь использовать динамические включения, но у меня проблемы с управлением выходными файлами:
/*
* enables modules
*/
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)
if (params.user_algo) {
user_algo = userAlgo(requestData.out.channel_data)
} else {
user_algo = null
}
output_json = [user_algo, uniqueActors.out]
// Filter output
Channel.fromList(output_json)
.filter{ it != null } <--- problem here
.map{ file(it) }
.set{jsonFiles}
compileJson(jsonFiles)
}
Проблема userAlgo
в том, что она может быть динамически загружена. И я не знаю, как я могу позаботиться об этом. С этим решением я получил Unknown method invocation
on ChannelOut type
ошибку getFileSystem.
Ответ №1:
Проблема в том, что fromList ожидает список значений, а не список каналов. Если вы используете пустой канал вместо проверки нулевого значения, вы можете использовать:
if( params.user_algo ) {
user_algo = userAlgo(requestData.out.channel_data)
} else {
user_algo = Channel.empty()
}
user_algo
| concat( uniqueActors.out )
| map { file(it) }
| compileJson
Комментарии:
1. Хорошая идея, я сделал более или менее то же самое, чтобы использовать fromList « uniqueActors() uniqueChannel = uniqueActors.out if (params.user_algo) { userAlgo() userChannel = userAlgo.out.userJson } else { userChannel = Channel.empty() } allJson = uniqueChannel.mix(Пользовательский канал) compileJson(allJson.ToList()) «