【问题标题】:Using expand() in snakemake to input any file from list of directories在snakemake中使用expand()从目录列表中输入任何文件
【发布时间】:2023-03-29 23:30:01
【问题描述】:

我有一个规则,它从定义为tasks 的目录列表中获取任何和每个 TSV 文件(多个 TSV)。例如:

tasks
    foo
        example1.tsv
        circle.tsv
    bar
        rectangle.tsv
    square
        triangle.tsv
        triangle_1.tsv

然后,我在 Snakemake 工作流程中有一个规则,它在文件列表上运行脚本,如下所示:

task_list = ["bar", "square"]

rule gather_files:
        input:
            tsv=expand("results/stats/{tasks}/*.tsv", tasks=task_list)
        output: 
            "results/plots/visualizations.pdf"
        script:
            "Rscript plot_script.R"

当我尝试运行规则时,*.tsv 会导致错误,我知道这也不是正确的方法。做这个的最好方式是什么?我应该使用正则表达式匹配{task}/*.tsv 中的任何字符串吗?我想限制要扩展的目录组合(tasks),但对其中的文件名没有限制。

【问题讨论】:

    标签: python wildcard snakemake


    【解决方案1】:

    这不是很优雅,但应该可以工作

    from glob import glob
    
    task_stats = ["foo", "bar", "square"] 
    
    rule combine_files:
            input:
                tsv=[j for i in expand("results/stats/{tasks}/*.tsv", tasks=task_stats) for j in glob(i)]
            output: 
                "results/plots/stats_visualizations.html"
            script:
                "../scripts/plot_all_stats.Rmd"
    

    【讨论】:

      【解决方案2】:

      我也有同样的问题,我用来解决这个问题的一种老生常谈的方法是传递一个目录作为输入,并将一个匹配模式作为规则的参数:

      rule analysis:
          params:
              csvglob = "*.csv"
          input:
              folder="results/stats/{tasks}"
          output: 
              "results/plots/stats_visualizations.html"
          script:
              "../scripts/plot_all_stats.Rmd"
      
      

      在我的脚本中,我从该参数中读取为

      rootdir = snakemake.input["folder"]
      csvglob = snakemake.params["csvglob"]
      files = glob(f"{rootdir}/{csvglob}")
      

      我采用类似的方法也适用于 R。

      缺点: - 感觉很老套。好处:- 很容易改变模式,或者在脚本中操作和过滤它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-13
        • 2022-12-17
        • 2022-11-22
        • 2023-02-18
        相关资源
        最近更新 更多