在params中使用通配符

时间:2018-03-19 20:20:20

标签: snakemake

使用snakemake中的config.yaml文件定义参数时是否可以使用通配符?我使用一般的R脚本来制作相同的基本热图,但使用不同的输入矩阵。我想使用通配符为config.yaml文件中的每个热图指定热图的配置(例如K-means群集的K数)。

例如:

rule heatmap:
    input: {condition}.mat
    output: {condition}.png
    params: clusters=config["heatmap-{condition}"][k]
    log: "logs/results/heatmap-{condition}.log" 

这样我可以在我的config.yaml文件中将k的数量定义为20,如{condition} = "development"时那样:

heatmap-development:
  k:
    - 20

现在我为KeyError获得了'{condition}'。任何帮助将不胜感激,非常感谢

1 个答案:

答案 0 :(得分:3)

你需要在params指令中使用一个函数来知道通配符。

rule heatmap:
        input: {condition}.mat
        output: {condition}.png
        params: clusters = lambda w: config["heatmap-{}".format(w.condition)][k]
        log: "logs/results/heatmap-{condition}.log"

在此处阅读更多内容:http://snakemake.readthedocs.io/en/stable/snakefiles/rules.html#non-file-parameters-for-rules