我有一个snakemake参数,例如:
def get_papreDE(config, super_group):
gtf_config = []
for sample_name in sample.keys():
group_data=sample[sample_name][0]
super_group_data=sample[sample_name][3]
if super_group == super_group_data or super_group == 'all':
stringtie_gtf = config['output']['stringtie_gtf'].format(sample=sample_name, output=output, group=group_data)
gtf_config.append("\t".join([sample_name, stringtie_gtf]))
return gtf_config
rule prepDE:
input:
gtf = lambda wildcards: get_stringtie_gtf(config, wildcards.group)
output:
counts = output_data['prepDE_counts']
params:
input_gtf = lambda wildcards: get_papreDE(config, wildcards.group),
threads: 9
log:
log = 'log/' + output_data['prepDE_counts'] + '.log'
shell:
"""
prepDE.py -i <(echo "{params.input_gtf}" | sed 's/ /\\n/g') -o {output.counts} > {log} 2>&1
"""
我希望这个脚本为prepDE.py生成输入表,但是shell中的
{params.input_gtf}
始终为空,最终运行的shell如下:
prepDE.py -i <(echo "" | sed 's/ /\\n/g') -o /path/to/output.csv > /path/to/log 2>&1
我已经通过在函数返回值之前直接打印
gtf_config
来检查该函数是否正常工作
这可能是因为 params 需要一个字符串,而不是一个列表。尝试将返回更改为
return ' '.join(gtf_config)
(或 '\n'.join
并跳过 sed 过程)。如果在返回之前列表为空,则引发错误也是谨慎的做法。