奇点容器在渲染 .Rmd 文件时使用主机库

singularity container uses host libraries upon rendering .Rmd file

我已经构建了一个基于 r-base 图像的奇点容器并安装了像 Seurat 这样的自定义库。现在我正在尝试 运行 我的 .Rmd 脚本如下:

singularity exec container.sif $(Rscript -e "rmarkdown::render('file.Rmd')")

但我收到错误消息:

Error: 'LoadVizgen' is not an exported object from 'namespace:Seurat'

当我 singularity shell container.sif 打开 R 时,我可以加载 Seurat 库以及函数 LoadVizgen。我的 .libPaths() 第一个路径是 "/usr/local/lib/R/site-library" - 在容器中它包含许多包但在主机系统中,它包含 none.

我知道奇点使用我的主机库而不是容器内构建的库。我尝试使用标志 --no-home 运行 并尝试在我的 .Rmd 文件中修改 .libPaths() 但我仍然遇到相同的错误。此外,在这两种情况下,执行我的 .Rmd 脚本时 list.files("/usr/local/lib/R/site-library") 没有包裹。

很高兴听到解决方案。此外,您能否指导我或解释一下为什么奇点容器默认使用主机库,以及如何控制要使用的库的特定路径?谢谢

$(...) 语句由 bash 计算,其输出是发送到奇点容器的内容。您可能想要的只是:

singularity exec container.sif Rscript -e "rmarkdown::render('file.Rmd')"
# even better with cleanenv
singularity exec -e container.sif Rscript -e "rmarkdown::render('file.Rmd')"