Подтвердить что ты не робот

Удалить библиотеку из .libPaths() навсегда без Rprofile.site

Как я могу навсегда удалить библиотеку в R?

.libPaths()
[1] "\\\\per-homedrive1.corp.riotinto.org/homedrive$/Tommy.O'Dell/R/win-library/2.15"
[2] "C:/Program Files/R/R-2.15.2/library"                                            
[3] "C:/Program Files/RStudio/R/library"     

Первым пунктом является моя корпоративная папка "Мои документы", и апостроф в пути от моей фамилии вызывает все виды печали при использовании R CMD INSTALL --build в пакете, который я создаю, не говоря уже о проблемах с использованием установленных пакетов там, когда я в сети от сети.

Я хочу использовать C:/Program Files/R/R-2.15.2/library вместо этого по умолчанию, но я не хочу полагаться на Rprofile.site.

Что я пробовал

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

Это работает, но только до тех пор, пока я не перезапущу свой сеанс R, а затем вернусь к исходному .libPaths()......

Restarting R session...

> .libPaths()
[1] "\\\\per-homedrive1.corp.riotinto.org/homedrive$/Tommy.O'Dell/R/win-library/2.15"
[2] "C:/Program Files/R/R-2.15.2/library"                                            
[3] "C:/Program Files/RStudio/R/library" 

Я подумал, что .libPaths() использовал R_LIBS_USER

> Sys.getenv("R_LIBS_USER")
[1] "//per-homedrive1.corp.riotinto.org/homedrive$/Tommy.O'Dell/R/win-library/2.15"

Итак, я попытался отключить его, используя Sys.unsetenv("R_LIBS_USER"), но он не сохраняется между сеансами.

Дополнительная информация

Если это имеет значение, вот некоторые переменные среды, которые могут быть релевантными...

> Sys.getenv("R_HOME")
[1] "C:/PROGRA~1/R/R-215~1.2"
> Sys.getenv("R_HOME")
[1] "C:/PROGRA~1/R/R-215~1.2"
> Sys.getenv("R_USER")
[1] "//per-homedrive1.corp.riotinto.org/homedrive$/Tommy.O'Dell"
> Sys.getenv("R_LIBS_USER")
[1] "//per-homedrive1.corp.riotinto.org/homedrive$/Tommy.O'Dell/R/win-library/2.15"
> Sys.getenv("R_LIBS_SITE")
[1] ""

Я пробовал Sys.unsetenv("R_LIBS_USER"), но это также не касается между сеансами

4b9b3361

Ответ 1

Просто установите переменную окружения R_LIBS в Windows на что-то вроде

R_LIBS=C:/Program Files/R/R-2.15.2/library

Перезапустить R.

Ответ 2

Это немного поздний ответ на вопрос, но может быть полезен для других. Я хочу настроить свой собственный путь (и удалить один из исходных), я:

  • используется .libPaths() внутри R для проверки текущих путей библиотеки;
  • определил, какие пути сохранить. В моем случае он сохранил оригинальную библиотеку R, но удалил ссылку на мои документы.
  • найден путь R-Home с использованием R.home() или Sys.getenv("R_HOME");
    • R-Home\R-3.2.2\etc\Rprofile.site читается каждый раз, когда R ядра запускается. Поэтому любая модификация будет устойчивой для каждого запуска R.
  • Отредактировано Rprofile.site, добавив следующее,

.libPaths(.libPaths()[2]) .libPaths("d:/tmp/R/win-library/3.2")

Как это работает?

  • Первая строка удаляет все, кроме одного, пути (второй из исходного списка), вторая строка добавляет дополнительный путь. Мы заканчиваем двумя путями.
  • Обратите внимание, что я использую нотацию Unix-пути, несмотря на использование окон. R всегда использует нотацию Unix, независимо от операционной системы.
  • перезапущен R (с помощью Ctr+Shift+F10)

Это будет работать каждый раз.

Ответ 3

Я положил команду Sys.unsetenv("R_LIBS_USER") в файл .Rprofile в моей папке windows "own documents". Кажется, поможет. Моя проблема заключалась в том, что, находясь в активной среде каталогов, вы сделали R выскочку и загрузку пакетов невероятно медленными при подключении через vpn.

Ответ 4

Если вы хотите сделать это в файле RProfile (@library/base/R/), вы можете искать строки, в которых установлены переменные среды R_LIBS_* (например, Sys.setenv(R_LIBS_SITE=....) и Sys.setenv(R_LIBS_USER=.....)) Вы также можете выполнить поиск кода .libPaths(), который устанавливает дерево библиотеки. Таким образом, вы можете достичь своей цели комбинацией комментариев, снятия с охраны и установки переменных R_LIBS перед вызовом .libPaths() по вашему желанию. Напр. Что-то вроде:

Sys.unsetenv("R_LIBS")
Sys.unsetenv("R_LIBS_USER")
Sys.setenv(R_LIBS_SITE = "D:/R/libs/site")
Sys.setenv(R_LIBS_USER = "D:/R/libs/user")
Sys.setenv(R_LIBS = "D:/R/libs")