Я хочу, чтобы .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 на локальном хосте.
@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"
>
Есть ли способ полностью избавиться от значений по умолчанию, чтобы включались только первые?
Обратите внимание, что вы можете просмотреть код .libPaths
, просто набрав .libPaths
(без скобок) в консоли и нажав Enter.
Абсолютно уверен, что он существует. Примечание: добавлено со второй попытки. Просто чтобы убедиться, что я посмотрел на list.files('.....')
.
Примечание: "" / home / conda / envs / dada2 / lib / R / library "и" "/ home / balter / conda / envs / dada2 / lib / R / library" разные. Второй добавляется, потому что я предполагаю, что он существует, но первый никогда не добавляется, потому что я предполагаю, что его не существует.
Спасибо, что уловили это. Я обновил вопрос. Теперь я могу правильно добавить два желаемых пути. Однако я не могу избавиться от других значений по умолчанию.
Они, вероятно, исходят от .Library
и .Library.site
, как я упоминал ранее. Вам нужно будет что-то сделать с окружающей средой, чтобы изменить их, но я думаю, возникает вопрос: почему вы хотите это сделать?
@Dason - причина в том, что я использую conda в качестве диспетчера пакетов. Плохо смешивать install.packages
и conda, если вы не очень осторожны. Лучшее решение - установить несколько пакетов, которые вы не можете установить с помощью conda, в отдельном месте. Я бы хотел, чтобы R даже не смотрел на системный уровень, иначе все действительно испортится.
Я попытался установить .Library=...
и .Library.site=....
, и это не повлияло на вывод .libPaths()
. Я также пробовал установить R_LIBS_SITE
, R_LIBS_USER
, R_HOME
и LD_LIBRARY_PATH
. Но это тоже не действует.
Думаю, это будет сложно. Обычно .Library - это то, что содержит базу, и довольно сложно что-либо сделать без базы.
У меня есть база в моей conda lib. Все находится в conda lib. На рабочем столе RStudio он работает должным образом. RStudio Server немного необычный.
Это довольно давно, но ответа нет, поэтому вот мой ввод:
Я только что решил эту точную проблему, переопределив несколько переменных среды 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, всегда перезаписывались переменными среды.
Вы уверены, что существует "/ home / balter / conda / envs / dada2 / lib / R / library"?
.libPaths()
не позволит вам добавить то, для чегоdir.exists
возвращает FALSE. Вы также всегда будете получать результаты.Library
и.Library.site
в вашем .libPaths (), поэтому вам нужно будет изменить некоторые переменные среды, чтобы изменить их.