snakemake - snakemake 规则:传递文件名之外的变量
问题描述
到目前为止,我使用snakemake 用snakemake 生成单独的图。这效果很好!不过,现在我想创建一个规则来创建跨主题的组合图,而无需将名称明确地放在图中。请参阅combined_plot
下面的规则。
topics=["soccer", "football"]
params=[1, 2, 3, 4]
rule all:
input:
expand("plot_p={param}_{topic}.png", topic=topics, param=params),
expand("combined_p={param}_plot.png", param=params),
rule plot:
input:
"data_p={param}_{topic}.csv"
output:
"plot_p={param}_{topic}.png"
shell:
"plot.py --input={input} --output={output}"
rule combined_plot:
input:
# all data_p={param}_{topic}.csv files
output:
"combined_p={param}_plot.png"
shell:
"plot2.py " + # one "--input=" and one "--output" for each csv file
有没有一种简单的方法可以用snakemake做到这一点?
解决方案
如果我理解正确,下面的代码应该更简单,因为它用expand
函数替换了 lambda 和 glob。它将执行两个命令:
plot2.py --input=data_p=1_soccer.csv --input=data_p=1_football.csv --output combined_p=1_plot.png
plot2.py --input=data_p=2_soccer.csv --input=data_p=2_football.csv --output combined_p=2_plot.png
topics=["soccer", "football"]
params=[1, 2]
rule all:
input:
expand("combined_p={param}_plot.png", param=params),
rule combined_plot:
input:
csv= expand("data_p={{param}}_{topic}.csv", topic= topics)
output:
"combined_p={param}_plot.png",
run:
inputs= ['--input=' + x for x in input.csv]
shell("plot2.py {inputs} --output {output}")
推荐阅读
- .net - Coldfusion cfobject 调用的 .NET 对象总是抛出异常
- cassandra - cassandra 节点到节点加密引发无法与对等方八卦异常
- python - ValueError:检查输入时出错:预期输入具有 4 个维度,但得到的数组具有形状 (859307, 1)
- sql - 在创建视图上选择用户
- javascript - Can't access object properties even though I can see they exist
- python - 如何在 Keras 中使用 predict_generator 对未标记的测试数据执行预测?
- haskell - 是否可以在 Haskell 中创建具有 Rank N 类型的无限包装器?
- tensorflow - 带有 'relu' 的 LSTM 'recurrent_dropout' 产生 NaN
- php - 如何在 apiplatform/graphql 上创建/突变具有子关系的实体
- angular - http调用之上的包装器可观察事件