Jak zarządzać wieloma lokalizacjami pakietów (folderami) w R?
Zanim dokonam aktualizacji do R-2.14, chcę skorzystać z okazji, aby zracjonalizować strukturę folderów moich zainstalowanych pakietów.
W tej chwili używam domyślnego R, tzn. wszystkie nowe zainstalowane pakiety przechodzą do r_libs_user. Jednak naprawdę rozróżniam dwie klasy pakietu:
- Pakiety, których używam wielokrotnie do pracy, np.
plyr
,data.table
, itd. - pakiety, które instaluję tylko po to, aby eksperymentować (często w celu powtórzenia pytania lub odpowiedzi na StackOverflow)
Ponieważ install.packages
oferuje jedną z opcji, aby podać argument lib
, jest to wyraźnie możliwe.
Czy istnieje łatwy sposób na Zarządzanie lokalizacjami pakietów, np. poprzez stworzenie sensownych ustawień / funkcji wrappera w .RProfile
lub RProfile.Site
?
4 answers
Doskonały pakiet Hadleya devtools
zapewnia funkcję dev_mode
.
http://www.inside-r.org/packages/cran/devtools/docs/dev_mode
Tutaj znajdziesz przykładowe użycie: https://gist.github.com/1150934
Zasadniczo,
dev_mode(TRUE, path = "anywhere-you-want-to-install")
install.packages("anything-that-you-want-to-install")
To potężny sposób.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-03 10:59:39
Istnieje wiele opcji na to. Pierwszą rzeczą, jaką zrobiłem, było dostosowanie mojego Rprofile.witryna zawiera następującą linię, dzięki czemu moja domyślna ścieżka biblioteczna jest katalogiem nieuwzględnionym w mojej instalacji R.
.libPaths(c("D:/R/Library",.libPaths()))
To sprawia, że D:/R/Library
jest moją domyślną ścieżką bez utraty pozostałych ścieżek. Możesz dodać do niej dwie ścieżki, np. D:/R/Library/Work
i D:/R/Library/Test
. Ta, która znajduje się na pierwszej pozycji, jest domyślną używaną, jeśli nie podasz lib w install.packages()
.
Wtedy możesz przypisać dwie zmienne w swoim .Rprofile.miejscu. Te są przypisane w podstawowej przestrzeni nazw, a więc zawsze dostępne i nie usuwane przez LS (). Coś jak
.libwork <- 'D:/R/Library/Work'
.libtest <- 'D:/R/Library/Test'
Który pozwala na zainstalowanie pakietów takich jak:
install.packages('aPackage',lib=.libwork)
Są też inne opcje, ale tak bym się kręcił.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-03 10:56:17
Powinieneś być w stanie określić kilka ścieżek/drzew bibliotek za pomocą oddzielonej dwukropkami listy ścieżek w zmiennej środowiskowej R_LIBS. Na R 2.13.1-patched nie mogłem tego zrobić niezawodnie - zajmuje tylko pierwszy wpis. Mam R_LIBS
i R_LIBS_USER
pracować niezawodnie na moim systemie - normalnie ustawiam tylko ten pierwszy.
.libPaths()
może dodawać nowe ścieżki do zestawu wyszukiwanych drzew bibliotek. Po prostu dodałbym odpowiednie wywołania do .libPaths(new)
w moim .Rprofile
, Aby dodać odpowiednie drzewa dla każdej sesji. Następnie możesz wybrać, gdzie zainstalować pakiety w czasie instalacji - tzn. którego drzewa użyć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-03 10:33:49
Aby odpowiedzieć, muszę podać trochę kontekstu.
Dla celów odtwarzalności, staram się skryptować rzeczy, w tym całą moją konfigurację R. Mam skrypt " inicjalizator.r", które, między innymi, instaluje Pakiety, a ja rozmieściłem pakiety w pakietach, takich jak te odnoszące się do buforowania, te odnoszące się do wizualizacji, próbkowania, statystyk przestrzennych itp. - moje własne poglądy, jeśli można.
Na przykład, oto fragment:
# Profiling & testing
Packages$CodingTools = c("codetools","debug", "profr","proftools","RUnit")
Łączę niektóre z pakiety do listy" głównych "pakietów (lub podstawowych), a inne do listy" drugorzędnych". Jestem pewien, że zainstaluję wszystko na podstawowej liście - są one potrzebne, aby mieć rozsądne środowisko R, aby używać własnych skryptów, funkcji i pakietów, itp. (Btw, niektóre pakiety są przypisane do wielu pakietów, ale tylko kilku; I de-dupe przed przetwarzaniem zagregowanej listy.)
Następnie określam domyślną bibliotekę specyficzną dla platformy i instaluję ją tam. Jednak ta możliwość jest rozszerzalna i ten pomysł można rozszerzyć o opcjonalne lokalizacje dla każdego pakietu (lub pakietu): po prostu Mapuj z nazwy pakietu, np. "CodingTools" do unikalnego katalogu (ścieżki biblioteki), powiedzmy "D:/R/Library/CodingTools". Można to zrobić w skrypcie inicjalizacji, z dopasowanymi listami i domyślnymi opcjami lub lokalizacje mogą być przechowywane w innym miejscu, takim jak tabela hash, JSON lub baza danych.
Jak mówili inni, domyślne ścieżki bibliotek muszą być przekazywane do R. można to zrobić w .RProfile.miejscu. W moim przypadku, mam inny skrypt, który jest używany do inicjalizacji wystąpienia R, jak chciałbym go. Staram się unikać zewnętrznych plików parametrów, które są odczytywane przez R (np.Rprofile), a zamiast tego wykonuj wszystkie inicjalizacje poprzez wywołania funkcji w moim własnym pakiecie (chociaż parametry są nadal zewnętrzne). Ułatwia mi to debugowanie i odtwarzanie mojej pracy. Tak więc moje ścieżki biblioteczne mogą być zawarte w tym samym rodzaju pliku JSON, w którym znajdują się moje Lokalizacje plików danych określone.
Osobiście chcę uciec od definiowania pakietów wewnątrz skryptu i zamiast tego używać JSON, ponieważ mogę łatwiej tworzyć różne pliki JSON dla różnych konfiguracji konfiguracji. Robię to już dla większości innych celów powtarzalnej pracy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-03 15:04:05