snakemake 无法在参数中获取 lambda 返回

问题描述 投票:0回答:1

我有一个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
来检查该函数是否正常工作

lambda bioinformatics snakemake
1个回答
0
投票

这可能是因为 params 需要一个字符串,而不是一个列表。尝试将返回更改为

return ' '.join(gtf_config)
(或
'\n'.join
并跳过 sed 过程)。如果在返回之前列表为空,则引发错误也是谨慎的做法。

© www.soinside.com 2019 - 2024. All rights reserved.