Изменить R путь библиотеки по умолчанию с помощью .libPaths в Rprofile.site не работает


206

Я использую R в Windows, а не в качестве администратора. Когда я устанавливаю пакет, следующая команда не работает:

> install.packages("zoo")
Installing package(s) into ‘C:/Program Files/R/R-2.15.2/library’
(as ‘lib’ is unspecified)
Warning in install.packages :
  'lib = "C:/Program Files/R/R-2.15.2/library"' is not writable

Чтобы установить пакет, я должен указать расположение библиотеки:

install.packages("zoo", lib="C:/software/Rpackages")

Чтобы загрузить пакет, я также должен указать расположение библиотеки:

library("zoo", lib.loc="C:/software/Rpackages")

Все это нормально, но я хотел посмотреть, смогу ли я C:/software/Rpackagesкак-нибудь добавить путь к библиотеке и, следовательно, не нужно вводить его каждый раз.

В процессе поиска в Интернете я обнаружил, что один из способов сделать это - отредактировать Rprofile.siteфайл и добавить строку

.libPaths("C:/software/Rpackages")

Тем не менее, после этого и запуска RStudio, это вывод, который я получаю

> .libPaths()
[1] "C:/Program Files/R/R-2.15.2/library" "C:/Program Files/RStudio/R/library" 

Команда, .libPathsкоторую я добавил в Rprofile.site, похоже, не имела никакого эффекта! Почему это так? Или, что более важно, как я могу решить проблему, чтобы я мог устанавливать и загружать пакеты, не вводя в библиотеку расположение?

Примечание: если я запускаю RStudio, .libPaths()команда, кажется, работает так, как она должна

.libPaths("C:/software/Rpackages")
> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"

Разве это не странно?


Можете ли вы немного рассказать о том, как именно install.packages("zoo")это не работает? Сообщение об ошибке и т. Д.?
Джоран

1
@joran Я добавил сообщение об ошибке , когда я пытаюсь install.packages("zoo")--- но это не мой вопрос, что о том, почему .libPaths()в Rprofile.siteне работает.
Мне нравится кодировать

1
У вас есть такие же проблемы, если вы используете RGui вместо R Studio?
Дейсон

6
Почему пути к библиотекам R по умолчанию соответствуют папкам, для которых требуются права администратора ?! Наверняка домашний каталог пользователя был бы более разумным
гео-теория

superuser.com/questions/749283/… Edit ~ / .Renviron R_LIBS_USER = / some / path
bowen.li

Ответы:


171

Обычно я стараюсь хранить все свои пакеты в одной библиотеке, но если вы хотите добавить библиотеку, почему бы не добавить новую библиотеку (которая должна уже существовать в вашей файловой системе) в существующий путь к библиотеке?

.libPaths( c( .libPaths(), "~/userLibrary") )

Или (и это сделает userLibrary первым местом для размещения новых пакетов):

.libPaths( c( "~/userLibrary" , .libPaths() ) )

Тогда я получаю (по крайней мере, назад, когда я написал это первоначально):

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/2.15/Resources/library"
[2] "/Users/user_name/userLibrary"  

.libPathsФункция немного отличается от большинства функций других nongraphics. Это работает через побочный эффект. Функции Sys.getenvи Sys.setenvэтот отчет и изменяющие переменные среды R были разделены, но .libPathsмогут либо сообщать, либо изменять свою цель.

Информацию о процессе запуска R можно прочитать на ?Startupстранице справки, а материалы RStudio можно найти по адресу: https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio.

В вашем случае кажется, что RStudio не соблюдает настройки Rprofile.site или, возможно, переопределяет их, считывая настройку .Rprofile из одного из значений по умолчанию RStudio. Следует также упомянуть, что результат этой операции также добавляет содержимое вызовов .Libraryи .Library.site, что является еще одной причиной того, почему Rtudio- (или любая другая IDE или установленная сеть) R-хост может демонстрировать другое поведение.

Поскольку Sys.getenv()возвращает текущую системную среду для процесса R, вы можете увидеть библиотеку и другие пути с помощью:

Sys.getenv()[ grep("LIB|PATH", names(Sys.getenv())) ]

Два варианта, которые имеют значение для хранения и доступа к пакетам (теперь отличаются для Linux):

R_LIBS_SITE                          /usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library
R_LIBS_USER                          /home/david/R/x86_64-pc-linux-gnu-library/3.5.1/

12
Мне нужно было перевернуть c()вектор, чтобы новые библиотеки переходили в пользовательскую папку
geotheory

Отличный момент. Фактически .libPaths-функция имеет тот же эффект по умолчанию. Существует также разница между операционными системами в том, как обрабатываются конечные слэши. (Не хорошо в Windows). Другие варианты существуют. Смотрите?.libPaths
IRTFM

5
На самом деле новый путь должен существовать в файловой системе, иначе он не будет добавлен в путь к библиотеке
jarandaf

Еще один хороший момент. Хотя имя функции говорит об обратном, вы можете сначала проверить file.existsи продолжить, только если путь не пропущен.
IRTFM

3
Я сделал это, и это работает, но кажется, что мне нужно менять путь каждый раз, когда я запускаю R. Это то же самое для других?
cyrusjan

215

Правильное решение состоит в том, чтобы установить для переменной среды R_LIBS_USERзначение пути к файлу в нужной папке библиотеки, а не заставлять RStudio распознавать файл Rprofile.site.

Чтобы установить переменную среды R_LIBS_USERв Windows, перейдите в Панель управления (Свойства системы -> Расширенные свойства системы -> Переменные среды -> Пользовательские переменные) на нужное значение (путь к папке вашей библиотеки), например

Variable name: R_LIBS_USER 
Variable value: C:/software/Rpackages  

Установка R_LIBS_USER гарантирует, что библиотека будет отображаться первой в .libPaths () независимо от запуска RStudio напрямую или путем щелчка правой кнопкой мыши по файлу и «Открыть с помощью», чтобы запустить RStudio.

Решение Rprofile может работать, если RStudio всегда запускается нажатием на ярлык RStudio. В этом случае достаточно будет установить в качестве рабочего каталога по умолчанию каталог, в котором находится ваш Rprofile . Решение Rprofile не работает при нажатии на файл для запуска RStudio, потому что это меняет рабочий каталог по сравнению с рабочим каталогом по умолчанию.


2
Договорились о правильном решении!
felixmc

14
Определенно правильное решение. Единственная загвоздка в том, что если ваш пользователь не является администратором (вероятно, в случае, если у вас возникла эта проблема для начала), вы должны изменить переменные среды через Панель управления-> Учетные записи пользователей-> Учетные записи пользователей-> Изменить мою среду переменные.
Дэвид Мой

1
Вы (случайно) знаете эквивалент в командной строке Linux?
Диего-MX

5
Конечно, просто установите их в качестве переменных оболочки (в bash вы можете редактировать .bash_profileи / или .bashrc). См. Здесь: unix.stackexchange.com/questions/117467/… Для установки их только для текущего сеанса введите в консолиexport R_LIBS_USER='directory_of_your_choice'
Павел Румиан

2
вместо установки переменной через панель управления я изменил значение по умолчанию R_LIB_USER в файле Rprofile. Вот решение: я придумал похожий подход, решение представлено в виде решения этого вопроса stackoverflow.com/questions/31707941/…
Marco

24

Мне удалось решить проблему, поместив код в .Rprofileфайл в рабочем каталоге по умолчанию.

Во-первых, я нашел расположение рабочего каталога по умолчанию

> getwd()
[1] "C:/Users/me/Documents"

Затем я использовал текстовый редактор, чтобы написать простой .Rprofileфайл со следующей строкой

.libPaths("C:/software/Rpackages")

Наконец, при запуске Rи запуске .libPaths()я получаю желаемый результат:

> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"
[3] "C:/Program Files/RStudio/R/library"

Это не работает для меня (как и решение от BondedDust). Я создал текстовый файл и сохранил его как .Rprofile в папке из getwd ().
Джон

2
@ Джон, я считаю, что мы говорим то же самое.
Мне нравится

3
R читает .Rprofile из вашего каталога HOME, а не из вашего каталога CURRENT .
Crt

Я придумал похожий подход, решение представлено в виде решения этого вопроса stackoverflow.com/questions/31707941/…
Marco

Чтобы найти home directroy, введите команду r Sys.getenv("HOME")в консоли r. Я не уверен, что вы получите желаемый результат. Я думаю, что желаемым результатом является то, что 42 показал в своем ответе stackoverflow.com/a/15170774/754550 . Он использует .libPaths немного по-другому.
miracle173


11

Я нашел то, что я считаю решением здесь (спасибо Карлу Шварцу в SFU) за добавление персональной библиотеки, которая постоянно (вам не нужно определять ее каждый сеанс) распознает, используя ли R или Rstudio, и Rstudio рассматривает ее как по умолчанию на моем компьютере Mac. Я не видел, чтобы это было четко изложено в SO, поэтому я суммировал их шаги для Windows, а затем для Mac.

Для ОС Windows 7:

  1. Создайте каталог на диске, где вы хотите разместить свою личную библиотеку, например C: \ User \ Rlibs (или другой, к которому у вас есть разрешения)

  2. Найдите или перейдите к «Изменить переменную среды для вашей учетной записи» в панели поиска Windows, чтобы изменить настройки панели управления.

  3. Нажмите «New ...» в середине окна «Environment Variables».

  4. В окне «Новая переменная пользователя» введите R_LIBS для «Имя переменной» и путь к созданному вами каталогу личной библиотеки, например, C: \ User \ Rlibs.

  5. Нажмите OK, и вы должны увидеть пару Variable / Value в окне пользовательских переменных

  6. Нажмите OK еще раз

Теперь, когда вы запускаете R (или Rstudio) и вводите команду, .libPaths()вы должны увидеть созданную вами личную библиотеку, а также системную библиотеку R.

Для Mac:

  1. В папке «Home» или «username» создайте папку с именем Rlibs

  2. Запустите приложение «Терминал»

  3. Тип: echo "R_LIBS=~/Rlibs"> .RenvrionУбедитесь, что регистр соответствует.

  4. Введите, ls -aчтобы увидеть полный список файлов в каталоге, который теперь должен включать .Renvrion

  5. Убедитесь, что файл .Renviron установлен правильно:more .Renviron

Запустите R / Rstudio и введите, .libPaths()и вы должны увидеть новый путь к вашей личной библиотеке.


8

Если у вас нет прав администратора, также может быть полезно открыть Rprofile.site-file, расположенный в \ R-3.1.0 \ etc, и добавить:

.First <- function(){
  .libPaths("your path here")
}

Это оценивает .libPath()команду непосредственно при запуске


4

У меня были реальные проблемы с пониманием этого. gorkypl дал правильное решение, приведенное выше, когда я в последний раз переустанавливал свою ОС и Rstudio, но на этот раз установка переменной среды не разрешилась.

Деинсталлировали и R и Rstudio, создавая каталоги C: \ R и C: \ Rstudio, затем переустановили оба.

Определите пользовательскую переменную R_LIBS_USER в предпочитаемом вами каталоге (согласно ответу gorkypl) и перезапустите ваш компьютер для загрузки пользовательской переменной. Откройте Rstudio, ошибки должны исчезнуть.

Вы также можете использовать Sys.setenv()для изменения R_LIBS_USER путь к вашей альтернативной библиотеке, что проще и не требует перезагрузки компьютера.

Чтобы увидеть, что для R_LIBS_USER установлено: ?Sys.getenv()

Чтение help(Startup)полезно.


2

Если ваша библиотека пакетов по умолчанию была изменена после установки новой версии R или любым другим способом, вы можете добавить обе библиотеки для использования всех пакетов с помощью приведенных ниже команд. Получите существующий путь к библиотеке:

.libPaths()

Теперь установите существующий и старый путь:

.libPaths(c(.libPaths(), "~/yourOldPath"))

Надеюсь, поможет.



1

Я читаю readme. В том, что они упомянули, используйте .libPaths () в командной строке, чтобы проверить, какие пути есть. У меня было 2 пути к библиотекам ранее. Когда я использовал команду .libpath («C: / Program Files / R / R-3.2.4revised / library»), где я хотел, она изменила путь к библиотеке. Когда я снова набрал .libPaths () в командной строке, он показал мне правильный путь. Надеюсь это поможет


1

В Ubuntu рекомендуемый способ изменения пути к библиотеке по умолчанию для пользователя - установить R_LIBS_USERпеременную в ~/.Renvironфайле.

touch ~/.Renviron
echo "R_LIBS_USER=/custom/path/in/absolute/form" >> ~/.Renviron

0
getwd()
# [1] "C:/Users/..../software/My R studio"

скопируйте вышеуказанную ссылку с двойной кавычкой

.libPaths(new="C:/Users/..../software/My R studio")

Ваш путь по умолчанию будет изменен для установки пакетов


0

Если вы хотите навсегда изменить путь к своей библиотеке (без вызова .libPath () каждый раз при вводе в R, это работает для меня:

  1. создайте .Rprofile под своим домашним каталогом. (~ / .Rprofile)

  2. введите .libPaths(c( .libPaths(), "your new path" )) файл .Rprofile, сохраните.

  3. Откройте R (любой каталог) и проверьте, просто введите .libPaths(), вы можете найти ваш путь к libaray обновлен!


-1

Я изучал это, потому что у R были проблемы с установкой в ​​папку по умолчанию, и вместо этого он просто помещал пакеты во временную папку. Это оказалось последнее обновление для Mcaffee Endpoint Security, которое, очевидно, имеет проблемы с R. Вы можете отключить защиту от угроз во время установки пакетов, и она будет работать правильно.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.