我是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}"
答案 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}"
同样,这是一个猜测,因为你还没有定义所有必要的项目。