如何解决在 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 举报,一经查实,本站将立刻删除。