Zmień domyślną ścieżkę biblioteki R za pomocą .libPaths w pliku Rprofile.site nie działa

205

Używam R w systemie Windows, a nie jako administrator. Po zainstalowaniu pakietu następujące polecenie nie działa:

> 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

Aby zainstalować pakiet, muszę określić lokalizację biblioteki:

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

Aby załadować pakiet, muszę również określić lokalizację biblioteki:

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

Wszystko to jest w porządku, ale chciałem sprawdzić, czy mogę C:/software/Rpackagesjakoś dodać do ścieżki biblioteki, a więc nie muszę jej wpisywać za każdym razem.

Podczas wyszukiwania online znalazłem, że jednym ze sposobów jest edycja Rprofile.sitepliku i dodanie wiersza

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

Jednak po zrobieniu tego i uruchomieniu RStudio otrzymuję dane wyjściowe

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

Wydane .libPathsprzeze mnie polecenie Rprofile.sitewydaje się nie mieć żadnego efektu! Dlaczego tak jest? A co ważniejsze, jak mogę rozwiązać problem, aby móc instalować i ładować pakiety bez wpisywania lokalizacji biblioteki?

Uwaga: jeśli uruchomię RStudio, .libPaths()polecenie wydaje się działać tak, jak powinno

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

Czy to nie dziwne?

Lubię kodować
źródło
Czy możesz trochę wyjaśnić, jak dokładnie install.packages("zoo")nie działa? Komunikat o błędzie itp.?
joran
1
@ joran Dodałem komunikat o błędzie, gdy próbuję install.packages("zoo")--- ale to nie jest moje prawdziwe pytanie, które dotyczy tego, dlaczego .libPaths()in Rprofile.sitenie działa.
Lubię
1
Czy masz takie same problemy, jeśli używasz RGui zamiast R Studio?
Dason
6
Dlaczego ścieżki bibliotek R domyślnie do folderów, które wymagają uprawnień administratora ?! Z pewnością katalog domowy użytkownika byłby bardziej sensowny
geotheory
superuser.com/questions/749283/… Edycja ~ / .Renviron R_LIBS_USER = / some / path
bowen.li

Odpowiedzi:

171

Zasadniczo staram się przechowywać wszystkie moje pakiety w jednej bibliotece, ale jeśli chcesz dodać bibliotekę, dlaczego nie dołączyć nowej biblioteki (która musi już istnieć w systemie plików) do istniejącej ścieżki biblioteki?

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

Lub (a to sprawi, że userLibrary będzie pierwszym miejscem do umieszczania nowych pakietów):

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

Potem dostaję (przynajmniej z powrotem, kiedy napisałem to pierwotnie):

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

Ta .libPathsfunkcja różni się nieco od większości innych funkcji nie graficznych. Działa poprzez efekt uboczny. Funkcje Sys.getenvi Sys.setenvraportujące i zmieniające zmienne środowiskowe R zostały rozdzielone, ale.libPaths mogą raportować lub zmieniać swój cel.

Informacje o procesie uruchamiania R można przeczytać na ?Startupstronie pomocy, a materiał RStudio znajduje się na stronie : https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio

W twoim przypadku wydaje się, że RStudio nie przestrzega ustawień Rprofile.site lub może je zastępuje, czytając ustawienie .Rprofile z jednego z domyślnych ustawień RStudio. Należy również wspomnieć, że wynik tej operacji dołącza również treść połączeń do .Libraryi.Library.site , co jest kolejnym powodem, dla którego RStudio - (lub dowolne inne IDE lub sieć zainstalowana -) hostowane R może wykazywać inne zachowanie.

Ponieważ Sys.getenv()zwraca bieżące środowisko systemowe dla procesu R, bibliotekę i inne ścieżki można wyświetlić za pomocą:

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

Dwa, które mają znaczenie dla przechowywania i uzyskiwania dostępu do pakietów to (teraz różne w Linux-ie):

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/
IRTFM
źródło
12
Musiałem odwrócić c()wektor, aby nowe biblioteki trafiły do ​​folderu niestandardowego
geotheory
Doskonały punkt W rzeczywistości .libPathsfunkcja -f ma domyślnie ten sam efekt. Istnieje również różnica między systemami operacyjnymi pod względem sposobu obsługi końcowych ukośników. (Nie OK w Windows). Istnieją inne opcje. Zobacz?.libPaths
IRTFM,
5
Nowa ścieżka musi faktycznie istnieć w systemie plików, w przeciwnym razie nie zostanie dodana do ścieżki biblioteki
jarandaf
Kolejna dobra uwaga. Chociaż nazwa funkcji sugeruje inaczej, możesz najpierw sprawdzić file.existsi kontynuować tylko wtedy, gdy nie brakuje ścieżki.
IRTFM,
3
Zrobiłem to i działa, ale wydaje się, że muszę zmieniać ścieżkę za każdym razem, gdy zaczynam R. Czy to samo dotyczy innych?
cyrusjan
214

Właściwym rozwiązaniem jest ustawienie zmiennej środowiskowej R_LIBS_USER na wartość ścieżki pliku do pożądanego folderu biblioteki, w przeciwieństwie do rozpoznawania pliku Rprofile.site przez RStudio.

Aby ustawić zmienną środowiskową R_LIBS_USERw systemie Windows, przejdź do Panelu sterowania (Właściwości systemu -> Zaawansowane właściwości systemu -> Zmienne środowiskowe -> Zmienne użytkownika) na pożądaną wartość (ścieżkę do folderu biblioteki), np.

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

Ustawienie R_LIBS_USER zapewni, że biblioteka pojawi się najpierw w .libPaths () niezależnie od uruchomienia RStudio bezpośrednio lub poprzez kliknięcie pliku prawym przyciskiem myszy i „Otwórz za pomocą”, aby uruchomić RStudio.

Rozwiązanie Rprofile może działać, jeśli RStudio jest zawsze uruchamiane przez kliknięcie skrótu RStudio. W takim przypadku wystarczy ustawić domyślny katalog roboczy na katalog, w którym znajduje się plik Rprofile . Rozwiązanie Rprofile nie działa po kliknięciu pliku, aby uruchomić RStudio, ponieważ powoduje to zmianę katalogu roboczego na domyślny.

Paweł Rumian
źródło
2
Uzgodnione właściwe rozwiązanie!
felixmc
14
Zdecydowanie właściwe rozwiązanie. Jedynym haczykiem jest to, że użytkownik nie jest administratorem (prawdopodobnie tak jest, jeśli masz ten problem na początku), musisz zmienić zmienne środowiskowe za pomocą Panelu sterowania-> Konta użytkowników-> Konta użytkowników-> Zmień moje środowisko zmienne.
David Moye
1
Czy znasz (zdarza się) odpowiednik w wierszu poleceń systemu Linux?
Diego-MX,
5
Jasne, po prostu ustaw je jako zmienne powłoki (w bash możesz edytować .bash_profilei / lub .bashrc). Zobacz tutaj: unix.stackexchange.com/questions/117467/... Aby ustawić je dla bieżącej sesji, wpisz tylko konsolęexport R_LIBS_USER='directory_of_your_choice'
Paweł Rumian
2
zamiast ustawiania zmiennej za pomocą panelu sterowania zmodyfikowałem domyślną wartość R_LIB_USER w pliku Rprofile. Oto rozwiązanie: wpadłem na podobne podejście, rozwiązanie zostało przedstawione jako rozwiązanie tego pytania stackoverflow.com/questions/31707941/...
Marco
24

Udało mi się rozwiązać problem, umieszczając kod w .Rprofile pliku w domyślnym katalogu roboczym.

Najpierw znalazłem lokalizację domyślnego katalogu roboczego

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

Następnie użyłem edytora tekstu, aby napisać prosty .Rprofileplik z następującym wierszem

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

Wreszcie, kiedy uruchamiam Ri uruchamiam .libPaths(), otrzymuję pożądany wynik:

> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"
[3] "C:/Program Files/RStudio/R/library"
Lubię kodować
źródło
To nie działa dla mnie (podobnie jak rozwiązanie z BondedDust). Utworzyłem plik txt i zapisałem go jako .Rprofile w folderze z getwd ().
John
2
@John Uważam, że mówimy to samo.
Lubię
3
R czyta plik .Rprofile z katalogu HOME, a nie z katalogu CURRENT .
Crt,
Wymyśliłem podobne podejście, rozwiązanie przedstawiono jako rozwiązanie tego pytania stackoverflow.com/questions/31707941/...
Marco
Aby znaleźć dyrektora domowego, wydaj polecenie Sys.getenv("HOME")r w konsoli r. Nie jestem pewien, czy uzyskasz pożądaną wydajność. Myślę, że pożądanym rezultatem jest to, co 42 pokazał w swojej odpowiedzi stackoverflow.com/a/15170774/754550 . Używa .libPaths w nieco inny sposób.
miracle173
11

Znalazłem tutaj rozwiązanie (dziękuję Carl Schwarz z SFU) za dodanie osobistej biblioteki, która jest na stałe (nie musisz jej definiować w każdej sesji) rozpoznaje, czy używasz R czy Rstudio, a Rstudio traktuje to jako domyślnie na moim komputerze Mac. Nie widziałem, żeby to wyraźnie określało to na SO, więc podsumowałem kroki, które oni podali, dla Windowsa, a potem dla Maca.

W przypadku systemu operacyjnego Windows 7:

  1. Utwórz katalog na dysku, na którym chcesz mieć swoją osobistą bibliotekę, np. C: \ User \ Rlibs (lub inny, do którego masz uprawnienia)

  2. Wyszukaj / przejdź do „Edytuj zmienną środowiskową dla swojego konta” na pasku wyszukiwania systemu Windows, aby edytować ustawienia panelu sterowania

  3. Kliknij „Nowy ...” pośrodku okna „Zmienne środowiskowe”

  4. W oknie „Nowa zmienna użytkownika” wpisz „ R_LIBS ” jako „Nazwa zmiennej” i ścieżkę do utworzonego katalogu biblioteki osobistej, np. C: \ User \ Rlibs

  5. Kliknij OK, a powinieneś zobaczyć parę Zmienna / Wartość w oknie Zmienne użytkownika

  6. Kliknij ponownie OK

Teraz po uruchomieniu R (lub Rstudio) i .libPaths()wpisaniu polecenia powinieneś zobaczyć utworzoną bibliotekę osobistą, a także bibliotekę systemową R.

Dla Maca:

  1. W katalogu „Strona główna” lub „nazwa użytkownika” utwórz folder o nazwie Rlibs

  2. Uruchom aplikację Terminal

  3. Typ: echo "R_LIBS=~/Rlibs"> .Renvrionupewnij się, że wielkość liter pasuje.

  4. Wpisz, ls -aaby zobaczyć pełną listę plików w katalogu, która powinna teraz zawierać .Renvrion

  5. Sprawdź, czy plik .Renviron został poprawnie ustawiony:more .Renviron

Uruchom R / Rstudio i wpisz, .libPaths()a powinieneś zobaczyć nową ścieżkę do swojej osobistej biblioteki.

Whalen
źródło
8

Jeśli nie masz uprawnień administratora, pomocne może być również otwarcie Rprofile.sitepliku znajdującego się w \ R-3.1.0 \ etc i dodanie:

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

To ocenia .libPath()polecenie bezpośrednio przy starcie

schlusie
źródło
4

Naprawdę miałem problem ze zrozumieniem tego. gorkypl podał prawidłowe rozwiązanie powyżej, kiedy ostatnio ponownie instalowałem system operacyjny i Rstudio, ale tym razem ustawienie mojej zmiennej środowiskowej nie zostało rozwiązane.

Odinstalowano zarówno R, jak i Rstudio, tworząc katalogi C: \ R i C: \ Rstudio, a następnie ponownie zainstalowano oba.

Zdefiniuj zmienną użytkownika R_LIBS_USER w swoim preferowanym katalogu (zgodnie z odpowiedzią gorkypl) i zrestartuj komputer, aby załadować zmienną użytkownika. Otwórz Rstudio, błędy powinny zniknąć.

Możesz także użyć Sys.setenv()do zmodyfikowania R_LIBS_USER do ścieżki alternatywnej biblioteki, co jest łatwiejsze i nie wymaga ponownego uruchamiania komputera.

Aby zobaczyć, co R_LIBS_USER jest ustawiony na: ?Sys.getenv()

Czytanie help(Startup)jest przydatne.

felixmc
źródło
2

Jeśli domyślna biblioteka pakietów została zmieniona po zainstalowaniu nowej wersji R lub w jakikolwiek inny sposób, możesz dołączyć obie biblioteki, aby korzystały ze wszystkich pakietów za pomocą poniższych poleceń. Uzyskaj istniejącą ścieżkę biblioteki:

.libPaths()

Teraz ustaw istniejącą i starą ścieżkę:

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

Mam nadzieję, że to pomoże.

Shivong Birla
źródło
2

wystarczy zmienić domyślny folder dla bibliotek R w katalogu bez uprawnień administratora, np

.libPaths("C:/R/libs")
Sébastien Więckowski
źródło
1

Przeczytałem readme. W tym celu wspomniano o użyciu .libPaths () w wierszu poleceń, aby sprawdzić, które ścieżki są dostępne. Miałem 2 ścieżki biblioteki wcześniej. Kiedy użyłem polecenia .libpath („C: / Program Files / R / R-3.2.4revised / library”) tam, gdzie chciałem, zmieniłem ścieżkę do biblioteki. Kiedy ponownie wpisałem .libPaths () w wierszu poleceń, pokazał mi poprawną ścieżkę. Mam nadzieję że to pomoże

Supriya Deverkonda
źródło
1

W systemie Ubuntu zalecanym sposobem zmiany domyślnej ścieżki biblioteki dla użytkownika jest ustawienie R_LIBS_USERzmiennej w ~/.Renvironpliku.

touch ~/.Renviron
echo "R_LIBS_USER=/custom/path/in/absolute/form" >> ~/.Renviron
tzabal
źródło
0
getwd()
# [1] "C:/Users/..../software/My R studio"

skopiuj powyższy link podwójnie odwróconym przecinkiem

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

Domyślna ścieżka zmieni się przy instalowaniu pakietów

Sayed Mohammed Zeeshan
źródło
0

Jeśli chcesz na stałe zmienić ścieżkę do biblioteki (bez wywoływania .libPath () za każdym razem, gdy wpisujesz w R, działa to dla mnie:

  1. utwórz .Rprofile w swoim katalogu domowym. (~ / .Rprofile)

  2. wpisz .libPaths(c( .libPaths(), "your new path" )) plik .Rprofile, zapisz.

  3. otwórz R (dowolny katalog) i sprawdź, po prostu wpisz .libPaths(), możesz znaleźć aktualizację ścieżki do libaray!

Pengyao
źródło
-1

Patrzyłem na to, ponieważ R miał problemy z instalacją w domyślnej lokalizacji i zamiast tego po prostu umieszczałem pakiety w folderze tymczasowym. Okazało się, że jest to najnowsza aktualizacja Mcaffee Endpoint Security, która najwyraźniej ma problemy z R. Możesz wyłączyć ochronę przed zagrożeniami podczas instalowania pakietów i będzie działać poprawnie.

Kristen Bystrom
źródło