【问题标题】:Dynamic output in snakemakesnakemake 中的动态输出
【发布时间】:2017-06-29 01:16:48
【问题描述】:

我正在使用snakemake 开发管道。我正在尝试为目录中的每个文件创建指向新目标的符号链接。我不提前知道会有多少文件,所以我正在尝试使用动态输出。

rule source:
    output: dynamic('{n}.txt')
    run:
        source_dir = config["windows"]
        source = os.listdir(source_dir)
        for w in source:
            shell("ln -s %s/%s source/%s" % (source_dir, w, w))

这是我得到的错误:

工作流程错误: “目标规则可能不包含通配符。请指定具体文件或不包含通配符的规则。”

有什么问题?

【问题讨论】:

标签: python snakemake


【解决方案1】:

为了使用动态功能,你需要有另一个规则,其中动态文件是输入。像这样:

rule target:
  input: dynamic('{n}.txt')
  
rule source:
  output: dynamic('{n}.txt')
  run:
    source_dir = config["windows"]
    source = os.listdir(source_dir)
    for w in source:
      shell("ln -s %s/%s source/%s" % (source_dir, w, w))

这样,Snakemake 将知道它需要为通配符赋予什么属性。

提示:当你使用通配符时,你总是需要定义它。在此示例中,在目标规则的输入中调用 dynamic 将定义通配符“{n}”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    相关资源
    最近更新 更多