Я создал контейнер сингулярности на основе образа 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"
- в контейнере он содержит много пакетов, но в хост-системе он не содержит ни одного.
Я понимаю, что сингулярность использует мои хост-библиотеки вместо тех, которые встроены в контейнер. Я попытался запустить с флагом --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')"