微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Snakemake - 将附加参数传递给输入函数

如何解决Snakemake - 将附加参数传递给输入函数

我正在尝试创建一个采用 TSV 表配置的 Snakemake 工作流程,如下所示:

sample    path
s1    /path/to/s1_dir
s2    /path/to/s2_dir

对于每个示例,我提供了一个目录,我从中使用了工作流中的各种路径。
我希望能够使用单个输入功能获得各种输入。我试过这个:

import pandas as pd

samples = pd.read_table('samples.tsv').set_index("sample",drop=False)

rule all:
    '...'

def get(wildcards,what):
    sample_dir = samples.loc[wildcards.sample,'path']
    if what == 1:
        return sample_dir + '/sub/' + 'someInput'
    elif what == 2:
        return sample_dir + '/sub2/' + 'otherInput'

rule rule1:
    input:
        get(what=1)
    ...

rule rule2:
    input:
        get(what=2)
    ...

然而,这会导致错误消息,并且根据文档,输入函数可能只接受一个参数(通配符)。我想一种解决方法是具有多个输入功能

def get1(wildcards):
    sample_dir = samples.loc[wildcards.sample,'path']
    return sample_dir + '/sub/' + 'someInput'

def get2(wildcards):
    sample_dir = samples.loc[wildcards.sample,'path']
    return sample_dir + '/sub2/' + 'otherInput'

但是如果我有 10 个不同的输入怎么办?知道怎么做吗?
谢谢!

解决方法

这就是我要做的。将您的自定义函数 get 与 lambda 函数结合:

def get(wildcards,what):
    # Do stuff with wildcards and what
    ...

rule one:
    input:
        lambda wc: get(wc,what= 1)

rule two:
    input:
        lambda wc: get(wc,what= 2)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。