Змінити шлях бібліотеки за замовчуванням за допомогою .libPaths у Rprofile.site не працює


205

Я запускаю 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 за замовчуванням до папок, для яких потрібні права адміністратора ?! Безумовно, домашній каталог користувача був би більш розумним
geotheory

superuser.com/questions/749283/… Редагувати ~ / .Renviron R_LIBS_USER = / some / path
bowen.li

Відповіді:


171

Як правило, я намагаюся зберігати всі мої пакети в одній бібліотеці, але якщо ви хочете додати бібліотеку, чому б не додати нову бібліотеку (яка вже повинна існувати у вашій файловій системі) до існуючої бібліотечної траси?

.libPaths( c( .libPaths(), "~/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, що є додатковою причиною, через яку RStudio- (або будь-яка інша встановлена ​​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
Я це зробив, і це працює, але, здається, мені доводиться змінювати шлях щоразу, коли запускаю Р. Це те ж саме для інших?
cyrusjan

214

Правильне рішення полягає у встановленні змінної середовища 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'
Paweł Rumian

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). Я створив txt-файл і зберег його як .Rprofile у папці від getwd ().
Джон

2
@John Я вважаю, що ми говоримо те саме.
Мені подобається Код

3
R читає .Rprofile з вашого HOME директорії не з вашого ПОТОЧНОГО каталогу.
Crt

Я придумав аналогічний підхід, рішення подається як вирішення цього питання stackoverflow.com/questions/31707941/…
Marco

Щоб знайти домашню дирекцію, видайте команду Sys.getenv("HOME")r у консолі r. Я не впевнений, чи отримаєте ви бажаний вихід. Я думаю, що бажаним результатом є те, що показав 42 у своїй відповіді stackoverflow.com/a/15170774/754550 . Він використовує .libPaths дещо по-іншому.
чудо173


11

Я знайшов те , що я думаю , що це рішення тут (спасибі Карл Шварц в СФУ) для додавання особистої бібліотеки, яка постійно (ви не повинні визначити його кожен сеанс) , чи визнають з допомогою R або Rstudio і Rstudio розглядає його як за замовчуванням на моїй машині Mac. Я не бачив, як це явно викладалося на SO, тому я підсумував кроки, які вони надали, для Windows, а потім для Mac.

Для ОС Windows 7:

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

  2. Шукайте / перейдіть до "Редагування змінної середовища для вашого облікового запису" на панелі пошуку Windows, щоб змінити налаштування панелі керування

  3. Натисніть "Створити ..." посеред вікна "Зміни навколишнього середовища"

  4. У вікні "Нова змінна користувача" введіть R_LIBS для "Ім'я змінної" та шлях до створеного вами персональної бібліотеки, наприклад C: \ User \ Rlibs

  5. Натисніть кнопку ОК, і ви побачите пару змінних / значення у вікні Користувацькі змінні

  6. Ще раз натисніть кнопку ОК

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

Для Mac:

  1. У своєму каталозі "Головна" або "Ім'я користувача" створіть папку під назвою " Rlibs"

  2. Запустіть програму Terminal

  3. Тип: echo "R_LIBS=~/Rlibs"> .Renvrion Переконайтесь, що регістр відповідає.

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

  5. Переконайтесь, що файл .Renviron встановлено правильно:more .Renviron

Запустіть R / Rstudio і введіть, .libPaths()і вам слід побачити новий шлях до вашої особистої бібліотеки.


8

Якщо у вас немає прав адміністратора, також може бути корисно відкрити Rprofile.siteфайл-файл, розташований у \ R-3.1.0 \ тощо, та додати:

.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"))

Сподіваюся, це допомагає.


2

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

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

1

Я читав ремед. Згадавши, вони використовують .libPaths () у командному рядку, щоб перевірити, які шляхи є. Раніше у мене були 2 бібліотечні стежки. Коли я використав команду .libpath ("C: / Файли програми / R / R-3.2.4ревізований / бібліотека"), де я хотів, це змінило шлях до бібліотеки. Коли я знову набрав .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 виникали проблеми з встановленням у розташування за замовчуванням і замість цього було просто введення пакунків у папку temp. Виявилося, що це останнє оновлення для Mcaffee Endpoint Security, яке, мабуть, має проблеми з R. Ви можете відключити захист від загрози під час встановлення пакунків, і він буде працювати належним чином.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.