标准化工作流中的Snakemake规则使用script指令运行Python脚本,例如以下模板规则:

rule XXXXX:
    input:
        ...,
    output:
        ....,
    params:
        ...,
    conda:
        "../envs/python.yaml"
    script:
        "../scripts/XXXX.py"

然后在脚本中,可以使用snakemake对象.然而,脚本随后与该规则紧密结合,这似乎是一个很大的缺点.

为什么这种方法比使用调用脚本的shell 的方法更可取,比如在下面的规则中?

rule XXXXX:
    input:
        ...,
    output:
        ....,
    params:
        absolute_script_path = ..., # get
        argument1 = ..., 
    conda:
        "../envs/python.yaml"
    shell:
        "python {params.absolute_script_path} {input} {params.argument1} > {output}"

在这种方法中,Python脚本与Snakemake规则分离.此外,它看起来更有内聚力,因为被调用的参数在规则中是明确的,而不是隐藏在脚本中. 我只是从编写Snakemake工作流开始,所以我只是一个初学者.我不明白为什么第一种方法比第二种方法更受欢迎(或在标准化的Snakemake工作流程中使用)?我是不是遗漏了什么?第二种方法有什么问题吗? 非常感谢您的回答!

推荐答案

就脚本可以通过params和其他指令访问的对象而言,script方法更灵活一些.

如果遵循shell方法,您可能会发现(重新)定义argparse或其他方法以正确考虑通过shell传递的参数很麻烦.这将主要是例行公事,但可能会变得有些单调乏味.

在需要交互复制/开发的场景中,notebook指令可能很有用.

总而言之,没有硬规则,对于给定的工作流,一种方法可能比其他方法更合适/更方便.

Python相关问答推荐

从收件箱获取特定列中的重复行

过载功能是否包含Support Int而不是Support Int?

如何在图片中找到这个化学测试条?OpenCV精明边缘检测不会绘制边界框

使用Keras的线性回归参数估计

在Python中对分层父/子列表进行排序

如何删除索引过go 的lexsort深度可能会影响性能?' &>

对于一个给定的数字,找出一个整数的最小和最大可能的和

运行Python脚本时,用作命令行参数的SON文本

有症状地 destruct 了Python中的regex?

通过Selenium从页面获取所有H2元素

从dict的列中分钟

Telethon加入私有频道

如何更改分组条形图中条形图的 colored颜色 ?

如何获得每个组的时间戳差异?

OR—Tools中CP—SAT求解器的IntVar设置值

有没有一种方法可以从python的pussompy比较结果中提取文本?

使用NeuralProphet绘制置信区间时出错

与命令行相比,相同的Python代码在Companyter Notebook中运行速度慢20倍

可以bcrypts AES—256 GCM加密损坏ZIP文件吗?

具有相同图例 colored颜色 和标签的堆叠子图