2013-02-14 8 views
12

Czy istnieje predefiniowana lokalizacja, w której pakiet R może przechowywać dane z pamięci podręcznej? Dane powinny być przechowywane w różnych sesjach. Myślałem o stworzeniu podkatalogu ${R_LIBS_USER}/package_name, ale nie jestem pewien, czy jest to przenośne i czy jest to "dozwolone", jeśli mój pakiet jest zainstalowany na cały system.Czy istnieje trwałe miejsce, które jest zawsze zapisywalne, które może być używane jako pamięć podręczna danych przez pakiet?

Idea jest następująca: Utwórz skrypt R mydata.R w podkatalogu data pakietu, który będzie wykonywany przez wywołanie data(mydata) (zgodnie z dokumentacją data()). Ten skrypt ładowałby dane z Internetu i zapisywał je w pamięci podręcznej, jeśli nie był wcześniej buforowany. (Jeśli dane zostały już zapisane w pamięci podręcznej, pamięć podręczna zostanie wykorzystana.) Dodatkowo zostanie udostępniona funkcja umożliwiająca unieważnienie pamięci podręcznej i/lub sprawdzenie, czy nowsza wersja danych jest dostępna online.

to z dokumentacji data():

Obecnie cztery formaty plików danych są obsługiwane:

  1. pliki kończący '.R' lub '.r' są źródłem() dw, z katalogiem roboczym R tymczasowo zmienionym na katalog zawierający odpowiedni plik. (Dane gwarantuje, że pakiet utils jest dołączony, w przypadku, gdy zostały uruchomić poprzez dane Utils ::.)

  2. ...

Rzeczywiście, tworząc plik fortytwo.R w podkatalogu data opakowania z następujących zawartości:

fortytwo = data.frame(answer=42) 

i wykonującego data(fortytwo) tworzy zmienną ramki danych fortytwo. Teraz pytanie brzmi: Gdzie byłoby fortytwo.R buforować dane, gdyby było to trudne do obliczenia?

EDIT: myślę o tworzeniu dwóch pakietów: Pakiet „dane”, które dostarcza danych oraz pakiet „kod”, który działa na nim. Pytanie dotyczy pakietu "data": Gdzie można przechowywać pliki w pamięci masowej dla poszczególnych użytkowników, aby było trwałe w sesjach R i było dostępne z różnych projektów R?

Powiązane: Package that downloads data from the internet during installation.

+2

Być może zechcesz rzucić okiem na https://github.com/hadley/rappdirs - jest to port AppDirs, który jest biblioteką Pythona, która próbuje znaleźć odpowiednie katalogi w sposób specyficzny dla systemu operacyjnego. – hadley

+0

Po prostu próbuję wyjaśnić: czy chodzi ci o to, gdzie można przechowywać dane po przetworzeniu przez skrypt R? Innymi słowy, czy rzeczywiście twoje pytanie dotyczy danych z pakietu danych lub danych generowanych jako dane wyjściowe z jakiegokolwiek przetwarzania, które miało miejsce? To * brzmi * jak ten drugi. – A5C1D2H2I1M1N2O1R2T1

+0

@hadley: Czy jest szansa, że ​​pojawi się ona w CRAN w najbliższym czasie? Jeśli nie ma na to sposobu R (jak umieszczenie go w podkatalogu '$ {R_USER_LIBS}), z przyjemnością skorzystam z twojego pakietu. – krlmlr

Odpowiedz

-2

Czy przeglądałeś bazy danych w pamięci? H2 & Redis ma powiązania w R za pośrednictwem RH2 & rredis - oba pozwalają na udostępnianie danych w trakcie r sesji - do momentu, gdy sesja tworzenia będzie żyła. w celu utrzymania go w sesjach bezkonkurencyjnych, musisz zapisać swoje dane na dysku (zakładając, że nie możesz odtworzyć go w locie - który mógłby pokonać cel tego pytania) i uważam, że dane pakiet byłby dobrym rozwiązaniem. W ten sposób możesz dodać funkcję aktualizacji, która inicjuje za każdym razem, gdy ładujesz pakiet (tj. Jeśli pakiet kodu ma właściwe zależności).

Przykładem są pakiety RWeka & RWekaJars. Sprawdź je w CRAN i zrozumienie ich działania powinno być dość łatwe.

+0

Mogę zapisać dane na dysku w natywnym formacie R. Po prostu muszę znaleźć miejsce *, w którym * mogę umieścić je tak, aby inne sesje R mogły je znaleźć. – krlmlr

+0

Tak jak powiedziałem, używam baz danych w pamięci. H2 & redis dobrze mi służą. – jackStinger

1

Nie ma absolutnie zdefiniowanej lokalizacji dla trwałego buforowania specyficznego dla pakietu w R.Jednak R.cache package zapewnia interfejs do tworzenia i zarządzania buforowanymi danymi. Wygląda na to, że może się przydać w twoim scenariuszu.

Gdy użytkownicy załadować R.cache (library(R.cache)), ale pojawia się następujący komunikat:

The R.cache package needs to create a directory that will hold cache files. 
It is convenient to use one in the user's home directory, because it remains 
also after restarting R. Do you wish to create the '~/.Rcache/' directory? If 
not, a temporary directory (/tmp/RtmpqdUcbP/.Rcache) that is specific to this 
R session will be used. [Y/n]: 

Mogą wybrać, aby utworzyć katalog cache w swoim katalogu domowym, który jest przypuszczalnie trwałe, lub utworzyć katalog specyficzny dla sesji. Jeśli sprawisz, że twój pakiet danych będzie zależał od R.cache, możesz sprawdzić istnienie obiektu (obiektów) buforowanych w jego funkcji przechwytywania .onLoad() i pobrać dane, jeśli ich tam nie ma. Alternatywnie możesz zrobić to w sposób sugerowany w twoim własnym pytaniu.

Powiązane problemy