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?

Author: Andrie, 2011-11-03

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.
 21
Author: kohske,
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ł.

 25
Author: Joris Meys,
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ć.

 4
Author: Gavin Simpson,
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.

 2
Author: Iterator,
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