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

Я запускаю 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"

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

Ответ 1

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

.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 немного отличается от большинства других неграфических функций. Это работает через побочный эффект. Функции 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, что является еще одной причиной, по которой R, размещенный в RStudio- (или любой другой IDE или сети installed-), может демонстрировать другое поведение.

Поскольку 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/

Ответ 2

Правильное решение - установить переменную окружения 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, потому что это приводит к тому, что рабочий каталог отключается от рабочего каталога по умолчанию.

Ответ 3

Мне удалось решить проблему, поместив код в файл .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"

Ответ 5

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

Для ОС Windows 7:

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

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

  3. Нажмите "Новый..." в середине окна "Переменные среды"

  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() и вы должны увидеть новый путь к вашей личной библиотеке.

Ответ 6

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

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

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

Ответ 7

У меня были реальные проблемы с пониманием этого. 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) полезно.

Ответ 8

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

.libPaths()

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

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

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

Ответ 9

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

Ответ 10

просто измените папку по умолчанию для ваших библиотек R в каталоге без прав администратора, например

.libPaths("C:/R/libs")

Ответ 11

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

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

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

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

Ответ 12

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

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

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

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

Ответ 13

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