微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Mambaforge 的 Snakemake 工作流程中使用 R

如何解决在 Mambaforge 的 Snakemake 工作流程中使用 R

我正在使用 Snakemake 构建管道。一个规则涉及使用 readr 读取 CSV 文件的 R 脚本。当我使用 --use-singularity--use-conda

运行管道时出现此错误
Error: UnkNown TZ UTC
In addition: Warning message:
In OlsonNames() : no Olson database found
Execution halted

Google 建议 readr 由于缺少 tzdata 而崩溃,但我不知道如何安装 tzdata 包并使 readr 看到它。我在 Mambaforge 容器中运行整个管道以确保可重复性。 Snakemake 建议在 Miniconda 容器上使用 Mambaforge,因为它更快,但我认为我的错误涉及 Mambaforge,因为使用 Miniconda 解决错误

这是重现错误的工作流程:

#Snakefile
singularity: "docker://condaforge/mambaforge"

rule targets:
    input:
        "out.txt"

rule readr:
    input:
        "input.csv"
    output:
        "out.txt"
    conda:
        "env.yml"
    script:
        "test.R"
#env.yml
name: env
channels:
    - default
    - bioconda
    - conda-forge
dependencies:
    - r-readr
    - tzdata
#test.R
library(readr)
fp <- snakemake@input[[1]]
df <- read_csv(fp)
print(df)
write(df$x,"out.txt")

我使用 snakemake --use-conda --use-singularity 运行工作流。当 Snakemake 工作流从 Mambaforge 奇点容器运行时,我如何运行 R 脚本?

解决方法

查看导致错误的 R 代码堆栈,我看到它检查了 zoneinfo 包含的 tzdata 文件夹的一堆默认位置,但也检查了 {{1} } 环境变量。

我相信对此的正确解决方案是让 Conda TZDIR 包将此变量设置为指向它。这将需要 Conda Forge 包的 PR。同时,您可以执行以下任一操作作为解决方法。

解决方法 1:从 R 设置 TZDIR

继续使用 Conda 的 tzdata 包,可以在 R 脚本的开头设置环境。

tzdata

我认为这是一种临时解决方法。

解决方法 2:派生一个新的 Docker

否则,制作一个包含系统级 tzdata 安装的新 Docker 镜像。类似(未测试):

Dockerfile

#!/usr/bin/env Rscript

## the following assumes active Conda environment with `tzdata` installed
Sys.setenv("TZDIR"=paste0(Sys.getenv("CONDA_PREFIX"),"/share/zoneinfo"))

将其上传到 Docker Hub 并使用它代替 Mambaforge 镜像作为 Snakemake 的镜像。这可能是一个更可靠的长期解决方案,但也许不是每个人都想创建一个 Docker Hub 帐户。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。