首页 > 解决方案 > Snakemake 扩展功能替代

问题描述

一段时间以来,我在生成具有多个输入和单个输出的工作流时遇到了一些困难,如下所示。下面的代码在某种程度上可以正常工作,但是当输入文件太多时,连接步骤总是会失败:

rule generate_text:
input:
    "data/{name}.csv"
output:
    "text_files/{name}.txt"
shell:
    "somecommand {input} -o {output}"

rule concatenate_text :
input:
    expand("text_files/{name}.txt", name=names)
output:
    "summaries/summary.txt"
shell:
    "cat {input} > {output}"

我做了一些挖掘,发现这归因于可以放在单个命令中的字符数的限制。我正在处理越来越多的输入,因此上述解决方案不可扩展。

有人可以为这个问题提出任何解决方案吗?我一直无法在网上找到任何东西。

理想情况下,该解决方案不会仅限于 cat 或其他 shell 命令,并且可以在可以使用 --use-conda 的情况下在规则结构中使用。我当前的修复涉及使用如下的 onsuccess 脚本,但这不允许使用 --use-conda 和特定于规则的 conda 环境。

关于 shell 命令的一件方便的事情是你可以给它提供snakemake 变量,但由于前面提到的 conda 问题,它对于我的目的来说不够灵活。

onsuccess:
    shell("cat text_files/*.txt > summaries/summary.txt")

标签: snakemake

解决方案


推荐阅读