автоматическое создание личной библиотеки в R

#r #rscript

#r #rscript

Вопрос:

Когда вы пытаетесь установить пакет в R и у вас нет прав доступа к пути к библиотеке по умолчанию, R спросит вас:

Хотели бы вы вместо этого использовать личную библиотеку?

Хотите создать личную библиотеку ‘~/ path’ для установки пакетов?

Однако, если вы используете Rscript, эти сообщения не будут отображаться, и установка завершится неудачно. Я мог бы заранее определить конкретный путь и указать install.packages , как его использовать, но я не хочу создавать дополнительный путь к библиотеке, который был бы специфичен для этого Rscript. Я просто хочу использовать личную библиотеку по умолчанию. Есть ли способ принудительно создать личную библиотеку, не требуя взаимодействия?

Комментарии:

1. Обновление .libPaths() ?

2. Вы должны полностью прочитать help(".libPaths") , на что ссылается справка install.packages . «Путь поиска библиотеки инициализируется при запуске из переменной среды R_LIBS (которая должна быть списком каталогов, разделенных двоеточием, в которых корневые деревья библиотек R), за которыми следуют каталоги в переменной среды R_LIBS_USER . Будут включены только те каталоги, которые существуют на данный момент. По умолчанию R_LIBS значение не задано и R_LIBS_USER устанавливается в каталог ‘R/R.version$platform-library/x.y’ домашнего каталога (или ‘Library/R/x.y/library’ для сборок CRAN OS X), для R x.y.z.`

3. (не хватает места) Сказав это, я не большой поклонник скрипта анализа, который фактически устанавливает пакеты. Я также могу быть в меньшинстве, а также быть компульсивно подозрительным специалистом по кибербезопасности, но я бы предпочел, чтобы был скрипт установки pkg, который я запускаю вручную, или предполетная проверка в скрипте, который затем сообщает мне, чего мне не хватает, особенно если сценарий основан на более старой или более новой версиипакет, и я использую определенную версию по какой-то причине.

4. Хорошо иметь сценарий установки, который запускается заранее в отдельном контексте, чем сценарий анализа. Но если этот сценарий установки сам по себе полностью автоматизирован, должен быть простой способ установить пользовательские (некорневые) пакеты без необходимости какого-либо ручного взаимодействия. Например pip , имеет тривиальный user флаг, который можно передать, чтобы указать ему использовать домашний каталог текущего пользователя вместо системного каталога. install.packages уже имеет функциональность для этого и определяет, куда должны идти пользовательские пакеты. У него должен быть user необязательный аргумент, который я могу установить TRUE .

5. Я не согласен с предположением, что R-скрипты обязательно являются сценариями анализа. Я думаю, что есть много ситуаций, когда мы можем захотеть написать сценарий инициализации на R, который обрабатывает зависимости

Ответ №1:

Вы можете использовать Sys.getenv("R_LIBS_USER") для получения местоположения поиска локальной библиотеки.

Это то, что я в итоге сделал, и, похоже, это работает (самой сложной частью было тестирование решения, поскольку проблема возникает только при первой попытке установки пакета):

 # create local user library path (not present by default)
dir.create(path = Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)
# install to local user library path
install.packages(p, lib = Sys.getenv("R_LIBS_USER"), repos = "https://cran.rstudio.com/")
# Bioconductor version (works for both Bioconductor and CRAN packages)
BiocManager::install(p, update = FALSE, lib = Sys.getenv("R_LIBS_USER"))
  

Как указал @hrbrmstr в комментариях, принудительная установка пакетов может оказаться не очень хорошей идеей, поэтому используйте на свой страх и риск.

Комментарии:

1. Обратите внимание, что biocLite больше не следует использовать для установки пакетов из Bioconductor. Используйте BiocManager::install()

2.Важно отметить: хотя вы можете установить R_LIBS_USER в своей среде и R будете уважать это, Sys.getenv("R_LIBS_USER") вернет что-то разумное, даже если R_LIBS_USER оно не установлено в вашей среде.