Как сбросить или полностью переопределить .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
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, всегда перезаписывались переменными среды.

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