Tworzenie pakietów w R
Tekst powstał na podstwawie artykułu Matt Wand i David Nott pod tytułem Making R Packages.
Na stronie opisano, za pomocą przykladu. w jaki sposób tworzyć własne pakiety funkcji w środowisku R.
Opis dotyczy procedury tworzenia pakietów w systmie Linux.
Zbudujemy pakiet o nazwie roots zawierający trzy funkcje: cuberoot(), fourthroot() i fifthroot().
Jak sama nazwa sugeruje cuberoot(x) zwraca pierwiastek trzeciego stopnia z liczby rzeczywistej x. Funkcje fourthroot() i fifthroot() zwracają odpowiednio pierwiastki stopnia 4 i 5. Prezentowane funkcje zostały zaimplementowane w językach:
R - cuberoot(),
Fortran - fourthroot(),
C - fifthroot().
W celu zbudowania pakietu należy wykonać następujące kroki:
- Uruchomić konsole i przejść do katalogu, w którym będzie tworzony pakiet np. /home/analityk/R. Opisane dalej kroki zakładają, że użytkownik jest właśnie w tym miejscu.
- W katalogu /home/analityk/R utworzyć dwa podkatalogi o nazwach myrlibrary i myrpackages.
- Będąc ciągle w katalogu /home/analityk/R za pomocą dowolnego edytora utworzyć plik o nazwie .Rprofile, który ma zawierać jedną linie .libPaths("/home/analityk/myrlibrary"). W tym miejscu zostanie zlokalizowany pakiet.
- Przejść do katalogu /home/analityk/R/myrpackages. W tym miejscu umieszczone zostano pliki źródłowe pakietu. Utworzyć podkatalog roots.
- Przejść do katalogu /home/analityk/R/myrpackages/roots i utworzyć 4 podkatalogi o nazwach: R, src, data i man.
- Używjąc polecenia chmod 755 * ustawić prawa dostępu do pakietu.
- Przejść do katalogu /home/analityk/R/myrpackages/roots/R. W tym miejscu umieścić pliki z kodem w języku R. cuberoot.r, fourthroot.r, fifthroot.r i firstlib.r. Wywołać polecenie chmod 644 * w celu zabezpieczenia pakietu. Odnotujmy, że plik firstlib.r zawiera funkcję .First.lib(), która jest wywoływana zawsze kiedy pakiet jest czytany. Jest to bardzo ważna funkcja, bo w niej są wczytywane funkcje zaimplementowane w Fortran i C.
- Przejść do katalogu /home/analityk/R/myrpackages/roots/src. W tym miejscu przechowywane będą funkcje napisane w Fortran i C. Utworzyć pliki o następujących nazwach i zawartości: fthrt.f i fifrt.c. Wywołać polecenie chmod 644 *.
- Przejść do katalogu /home/analityk/R/myrpackages/roots/data. W tym katalogu mogą być przechowywane dane. Utworzyć plik o następującej nazwie i zawartości: table.of.roots.txt Wywołać polecenie chmod 644 *.
- Przejść do katalogu /home/analityk/R/myrpackages/roots/man.W tykm katalogu znajdują się pliki pomocy. Utworzyć pliki o następujących nazwach i zawartości: cuberoot.rd, fourthroot.rd, fifthroot.rd i table.of.roots.rd. Wywołać polecenie chmod 644 *.
- Przejść do katalogu /home/analityk/R/myrpackages/roots i utworzy ć plik o następującej nazwie i zawartości: DESCRIPTION
- Za pomocą dowolnego edytora otworzyć plik i wprowadzić swoje dane.
- Będąc ciągle w katalogu /home/analityk/R/myrpackages/roots wywołać polecenie chmod 644 DESCRIPTION.
- Wszystkie pliki pakietu roots są już we właściwym miejscu. Przejść do katalogu /home/analityk/R/myrpackages i wywołać polecenie R CMD build roots. Powstał plik roots_0.1-1.tar.gz.
- Zainstalować pakiet używając polecenia R CMD INSTALL -l /home/analityk/R/myrlibrary roots_0.1-1.tar.gz. Pakiet zostanie zainstalowany w katalogu /home/analityk/R/myrlibrary. Po uruchomieniu R, pakiet można zainstalować również poleceniem install.packages("/home/analityk/R/myrlibrary roots_0.1-1.tar.gz", repos=NULL).
- W celu sprawdzenia czy pakiet został porawie zainstalowany przejść do dowolnego innego katalogu. Uruchomić program R. W trakcie sesji R użyć komendy library("roots", lib.loc="/home/analityk/R/myrlibrary/"). Po załadowaniu biblioteki wywoląc funkcje cuberoot(27). Jeżeli otrzymamy 3, to mamy pewność, że pakiet został poprawie zainstalowany.
- Dla bardziej szczegółowej kontroli wpisać data(table.of.roots) a następnie table.of.roots Tabeli tej użyć można do przetestowania funkcji z różnymi argumentami Np. fourthroot(6) powinno zwrócić 1.565085.
- Dla przećwiczenia proceduru utworzyć nową funkcję wraz z dokumetacją np. sixthroot() i utworzyć wersję 0.1-2 pakietu roots.
Inny opis tworzenia pakietów zajduje się na tutaj albo tutaj
Bardzo szybko strukturę katalogów wraz z plikami, w których znajdyją się definicje funkcji można wygenerować za pomocą polecenia:
package.skeleton(list=c("f","g","d","e"), name="mypkg")
gdzie f, g, d, e to nazwy zdefiniownych w R funkcji a mypkg to nazwa tworzonego pakietu.
Ważne, żeby funkcje były wcześniej zdefiniowane. Dalej postępujemy analogicznie jak w pkt. 14 i kolejnych.