Как сбросить или полностью переопределить .libPaths в R?

Я хочу, чтобы .libPaths() вернул "/home/balter/R" "/home/balter/conda/envs/dada2/lib/R/library".

Вот что я получаю:

> .libPaths()
[1] "/home/balter/R"                "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"      
[4] "/usr/lib/R/library"           
> .libPaths(new='/home/balter/conda/envs/dada2/lib/R/library')
> .libPaths()
[1] "/home/balter/conda/envs/dada2/lib/R/library" "/usr/local/lib/R/site-library"              
[3] "/usr/lib/R/site-library"                     "/usr/lib/R/library"                         
> .libPaths(new=c("/home/conda/envs/dada2/lib/R/library", "/home/balter/R"))
> .libPaths()
[1] "/home/balter/R"                "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"      
[4] "/usr/lib/R/library"           
> .libPaths(c("/home/conda/envs/dada2/lib/R/library", "/home/balter/R"))
> .libPaths()
[1] "/home/balter/R"                "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"      
[4] "/usr/lib/R/library"           
> .libPaths(c("/home/conda/envs/dada2/lib/R/library", "/home/balter/R"))
> .libPaths()
[1] "/home/balter/R"                "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"      
[4] "/usr/lib/R/library"           
> .libPaths(new=c("/home/conda/envs/dada2/lib/R/library", "/home/balter/R"))
> .libPaths()
[1] "/home/balter/R"                "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"      
[4] "/usr/lib/R/library"            
> .libPaths(new = "home/balter/R")
> .libPaths()
[1] "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"       "/usr/lib/R/library"           
> .libPaths("home/balter/R")
> .libPaths()
[1] "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"       "/usr/lib/R/library" 

Кажется, я не могу расчистить и сбросить пути.

ЗАМЕТКА:

Это бесплатная версия RStudio Server, работающая в WSL Ubuntu 18.04 на локальном хосте.

ПРИМЕЧАНИЕ II:

@Dason указал на опечатку. Исправляя это у меня есть:

> .libPaths()
[1] "/home/balter/R/x86_64-pc-linux-gnu-library/3.4" "/usr/local/lib/R/site-library"                 
[3] "/usr/lib/R/site-library"                        "/usr/lib/R/library"                            
> .libPaths(c("/home/balter/conda/envs/dada2/lib/R/library", "~/R"))
> .libPaths()
[1] "/home/balter/conda/envs/dada2/lib/R/library" "/home/balter/R"                             
[3] "/usr/local/lib/R/site-library"               "/usr/lib/R/site-library"                    
[5] "/usr/lib/R/library"                         
> 

Есть ли способ полностью избавиться от значений по умолчанию, чтобы включались только первые?

Вы уверены, что существует "/ home / balter / conda / envs / dada2 / lib / R / library"? .libPaths() не позволит вам добавить то, для чего dir.exists возвращает FALSE. Вы также всегда будете получать результаты .Library и .Library.site в вашем .libPaths (), поэтому вам нужно будет изменить некоторые переменные среды, чтобы изменить их.

Dason 13.09.2018 20:50

Обратите внимание, что вы можете просмотреть код .libPaths, просто набрав .libPaths (без скобок) в консоли и нажав Enter.

Dason 13.09.2018 21:02

Абсолютно уверен, что он существует. Примечание: добавлено со второй попытки. Просто чтобы убедиться, что я посмотрел на list.files('.....').

abalter 13.09.2018 21:06

Примечание: "" / home / conda / envs / dada2 / lib / R / library "и" "/ home / balter / conda / envs / dada2 / lib / R / library" разные. Второй добавляется, потому что я предполагаю, что он существует, но первый никогда не добавляется, потому что я предполагаю, что его не существует.

Dason 13.09.2018 21:13

Спасибо, что уловили это. Я обновил вопрос. Теперь я могу правильно добавить два желаемых пути. Однако я не могу избавиться от других значений по умолчанию.

abalter 13.09.2018 21:18

Они, вероятно, исходят от .Library и .Library.site, как я упоминал ранее. Вам нужно будет что-то сделать с окружающей средой, чтобы изменить их, но я думаю, возникает вопрос: почему вы хотите это сделать?

Dason 13.09.2018 21:34

@Dason - причина в том, что я использую conda в качестве диспетчера пакетов. Плохо смешивать install.packages и conda, если вы не очень осторожны. Лучшее решение - установить несколько пакетов, которые вы не можете установить с помощью conda, в отдельном месте. Я бы хотел, чтобы R даже не смотрел на системный уровень, иначе все действительно испортится.

abalter 13.09.2018 21:44

Я попытался установить .Library=... и .Library.site=...., и это не повлияло на вывод .libPaths(). Я также пробовал установить R_LIBS_SITE, R_LIBS_USER, R_HOME и LD_LIBRARY_PATH. Но это тоже не действует.

abalter 13.09.2018 21:49

Думаю, это будет сложно. Обычно .Library - это то, что содержит базу, и довольно сложно что-либо сделать без базы.

Dason 14.09.2018 05:38

У меня есть база в моей conda lib. Все находится в conda lib. На рабочем столе RStudio он работает должным образом. RStudio Server немного необычный.

abalter 15.09.2018 06:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
788
1

Ответы 1

Это довольно давно, но ответа нет, поэтому вот мой ввод:

Я только что решил эту точную проблему, переопределив несколько переменных среды R_ * по умолчанию для сервера rstudio, определив .Renviron в корне каталога проекта.

# .Renviron example - set exclusive R library
R_LIBS=/path/to/your/envs/R/library/ # Set env's R library location
R_LIBS_USER = ""                       # Unset user's local R library
R_LIBS_SITE = ""                       # Unset default system R libraries
    # !EDIT! - Make sure the version of R you set to R_HOME is the one that RStudio-Server 
    #    is running. (I haven't been able to get the server to run Anaconda's version)
    #  When I changed R_HOME to the version in my conda env and the server was running 
    #    the system R, it broke all of the locally compiled packages.
R_HOME=/path/to/your/envs/R          # Reset R's home directory to the one in the env's home

Если вы не знаете, .Renviron - это сценарий, который запускается при запуске сеанса R. Как следует из названия, он используется специально для установки переменных среды.

Вы также можете запустить код R при запуске в скрипте .Rprofile. Приведенный ниже пример сценария добавит новый путь к вашим .libPaths, но не приведет к удалению библиотек, найденных при поиске в каталогах R_LIBS *.

# .Rprofile - set .libPaths
assign(".lib.loc", "/path/to/your/envs/R/library/", envir = environment(.libPaths))

Вы можете каскадировать эти файлы конфигурации из корня вашего проекта, домашнего каталога пользователя и домашнего каталога R, и они будут запускаться преимущественно в этом порядке (но будет выполняться только первый обнаруженный скрипт каждого типа).

Я думаю, что .Renviron запускается после .Rprofile (или переменные среды обрабатываются позже), потому что изменения, которые я делал с помощью приведенного выше сценария .Rprofile, всегда перезаписывались переменными среды.

Другие вопросы по теме