在我的 snakemake 工作流程中,我定义了一个函数,该函数使用之前在工作流程中生成的文件,对其进行解析并返回一个包含 2 个元素的列表,例如:
def get_param_value(wildcards) :
with open('file_from_workflow_using_wildcards') as file :
# do stuff
return ["element1","element2"]
然后我想params
在后续规则中独立使用返回列表的每个值,例如:
rule example :
input :
'input_file.txt'
output :
'output_file.txt'
params :
param1 = "element1", # First element of the list returned by get_param_value function
param2 = "element2" # Second element of the list returned by get_param_value function
shell :
'somecommand -i {input} -smth1 {params.param1} -smth2 {params.param2} -o {output} ;'
我已经尝试在规则中直接使用该函数,
params :
param1 = get_param_value[0],
param2 = get_param_value[1]
但我得到一个TypeError : 'function' object is not subscriptable
(这是预期的,因为它是一个函数)。
你有解决方法吗?
经过一番修补并感谢Mario Abbruscato的建议,我想出了一个解决方案。我改变了两件事:
def get_param_value(wildcards) :
with open('file_from_workflow_using_wildcards') as file :
# do stuff
params_list = ["element1","element2"]
return params_list
params
在规则的指令中使用了 lambda 函数来提取列表的元素并将它们分配给不同的参数:rule example :
input :
'input_file.txt'
output :
'output_file.txt'
params :
param1 = lambda wildcards : get_param_value(wildcards)[0],
param2 = lambda wildcards : get_param_value(wildcards)[1]
shell :
'somecommand -i {input} -smth1 {params.param1} -smth2 {params.param2} -o {output} ;'
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句