在snakemake中,对于两个输入,展开向量的成对组合

时间:2018-03-06 01:03:31

标签: snakemake

我是Snakemake的新手,并且在Snakemake扩展功能方面存在问题。

首先,我需要有一组组合,并使用它们作为基础,使用它的成对元素组合在它们上展开另一个向量。 让我们说成对组合的集合是

setC=["A","B","C","D"]

我得到的部分群如下:

part_group1 = expand("TEMPDIR/{setA}_{setB}_", setA = config["setA"], setB = config["setB"]

然后,(如果可以的话),我使用这个部分组,用它的成对组合展开另一个集合。但我不知道如何扩展setC的成对组合,如下所示。这显然不正确;刚写完就是为了澄清这个问题。另外,如何从shell输入扩展估算器的名称?

rule get_performance:
input:
    xdata1 = TEMPDIR + part_group1 +"{setC}.rda"
    xdata2 = TEMPDIR + part_group1 +"{setC}.rda"
    estimator1= {estimator}
output:
    results = TEMPDIR + "result_" + part_group1 +{estimator}_{setC}_{setC}.txt"
params:
    Rfile = FunctionDIR + "function.{estimator}.R"
shell:
    "Rscript {params.Rfile} {input.xdata1} {input.xdata12} {input.estimator1} "
    "{output.results}"

1 个答案:

答案 0 :(得分:3)

expand函数将返回所用变量的乘积列表。例如,如果

setA=["A","B"]
setB=["C","D"]

然后

expand("TEMPDIR/{setA}_{setB}_", setA = config["setA"], setB = config["setB"]

会给你:

["TEMPDIR/A_C_","TEMPDIR/A_D_","TEMPDIR/B_C_","TEMPDIR/B_D_"]

你的问题不是很清楚你想要实现什么,但我会猜测。 如果你想成为setC的成对组合:

import itertools
combiC=list(itertools.combinations(setC, 2))
combiList=list()
for c in combiC:
    combiList.append(c[0]+"_"+c[1])

你(可能)想要文件:

rule all:
    input: expand(TEMPDIR + "/result_{A}_{B}_estim{estimator}_combi{C}.txt",A=setA, B=setB, estimator=estimators, C=combiList)

我会说些像#34; estim"和" combi"不要在这里混淆通配符。我不知道列表或集合"估算器"应该是,但我想你已经在上面宣布了它 然后你的规则get_performance

rule get_performance:
    input: 
           xdata1 = TEMPDIR + "/{A}_{B}_{firstC}.rda",
           xdata2 = TEMPDIR + "/{A}_{B}_{secondC}.rda"
    output:
           TEMPDIR + "/result_{A}_{B}_estim{estimator}_combi{firstC}_{secondC}.txt"
    params:
           Rfile = FunctionDIR + "/function.{estimator}.R"
    shell:
           "Rscript {params.Rfile} {input.xdata1} {input.xdata2} {input.estimator} {output.results}"

同样,这是一个猜测,因为你还没有定义所有必要的项目。