Pierwszy kod źródłowy pakietów R do nauki w ramach przygotowań do napisania własnego pakietu

47

Planuję zacząć pisać paczki R.

Pomyślałem, że dobrze byłoby przestudiować kod źródłowy istniejących pakietów, aby poznać konwencje budowy pakietów.

Moje kryteria dobrych pakietów do nauki:

  • Proste pomysły statystyczne / techniczne : Chodzi o poznanie mechaniki konstrukcji opakowań. Zrozumienie pakietu nie powinno wymagać szczegółowej wiedzy ściśle związanej z domeną na temat aktualnego tematu pakietu.
  • Prosty i konwencjonalny styl kodowania : szukam czegoś więcej niż, Hello Worldale nie wiele więcej. Idiosynkratyczne sztuczki i hacki byłyby rozpraszające podczas pierwszego uczenia się pakietów R.
  • Dobry styl kodowania : kod jest dobrze napisany. Ujawnia zarówno zrozumienie dobrego kodowania, jak i świadomość konwencji kodowania w R.

Pytania:

  • Które pakiety dobrze byłoby studiować?
  • Dlaczego sugerowany kod źródłowy pakietu jest dobry do studiowania w odniesieniu do wyżej wymienionych kryteriów lub innych kryteriów, które mogą być istotne?

Aktualizacja (13.12.2010) Po komentarzach Dirka chciałem wyjaśnić, że bez wątpienia wiele pakietów byłoby dobrze uczyć się w pierwszej kolejności. Zgadzam się również, że pakiety zapewnią modele dla różnych rzeczy (np. Winiety, klasy S3, klasy S4, testy jednostkowe, Roxygen itp.). Niemniej jednak interesujące byłoby przeczytanie konkretnych sugestii na temat dobrych pakietów na początek i powodów, dla których byłyby to dobre pakiety na początek.

Zaktualizowałem również powyższe pytanie, aby odnosiło się do „paczek” zamiast „paczki”.

Jeromy Anglim
źródło
2
Innym sposobem na to jest poszukiwanie konkretnych autorów pakietów ; niektórzy autorzy są bardzo dobrzy w przestrzeganiu najlepszych praktyk i pisaniu przejrzystego kodu, w którym to przypadku możesz przestudiować wszystkie ich materiały.
Shane
1
@Shane Dobra uwaga. Jakieś sugestie na temat tego, którzy autorzy pakietów powinni się uczyć przy pierwszej nauce pisania pakietów?
Jeromy Anglim

Odpowiedzi:

15

Sugerowałbym spojrzenie na pakiet zoo z następujących powodów:

  1. Ma kilka dobrze napisanych winiet;
  2. Wykorzystuje przy użyciu nazw useDynLib, import, export, i S3method;
  3. Ma kilka testów jednostkowych przy użyciu RUnit;
  4. Zapewnia dobre przykłady tworzenia / dokumentowania metod S3;
  5. Ma kilka wywołań kodu C przez .Callinterfejs;
  6. Zawiera demo (kreślenie);
  7. Ma być spójny z podstawową instalacją R (np. Funkcje zachowują się podobnie, nie maskują / nie zastępują funkcji podstawowych itp.)

Nie używa roxygen, co jest bardzo przydatne, ale 7 na 8 nie jest złe. ;-)

Aby odpowiedzieć na twoje kryteria:

  1. Koncepcja jest prosta: zoojest klasą macierzową uporządkowaną według czegoś . Nie jest wymagana wiedza specyficzna dla domeny.
  2. zoo wygląda na to, że ma kilka konwencji kodowania, ale nic nie przesadza z zrozumieniem kodu.
  3. zoo dąży do jak największej zgodności z R.
Joshua Ulrich
źródło
1
Gdzie można znaleźć ten pakiet?
Adam SA,
@Adam: w odpowiedzi dodałem link do zoo. Ta strona zawiera również link do strony projektu R-forge zoo.
Joshua Ulrich,
9

Nie uważam się za uznanego programistę pakietów R, ale niedawno przeszedłem proces pisania i utrzymywania pakietu dla mojego środowiska pracy.

Wcześniej pisałem / utrzymywałem / aktualizowałem zestaw skryptów, które przekazywałem od projektu do projektu za pomocą source()funkcji. Efektem końcowym było to, że w większości przypadków redundantne skrypty były zawieszane w różnych miejscach na naszych dyskach sieciowych. Nigdy nie było jasne, gdzie znajduje się najnowszy zestaw skryptów. Od tego czasu przeprowadziłem migrację do pisania / utrzymywania pakietu wykorzystującego roxygen. To znacznie uprościło moje życie i ułatwiło dzielenie się pracą z kolegami.

W oparciu o powyższe kryteria popieram zalecenie przejrzenia pakietów napisanych przez Hadley. W szczególności uważam, że przeczytanie wiki devtools byłoby bardzo pomocne. Kod Hadleya jest dobrze udokumentowany, a kilka jego pakietów wykorzystuje roxygen. Myślę, że pisanie i utrzymywanie jednego dokumentu dla funkcji R i dokumentacji R jest znacznie łatwiejsze niż podzielenie ich na dwie lokalizacje (pliki .R i .RD).

Pakiety Hadleya służą również dość podstawowym pojęciom i są stosunkowo łatwe do wyparowania (imho), jeśli szukasz wskazówek dotyczących pomysłów dotyczących aspektów technicznych. Znalazłem się kopanie przez plyr kodu źródłowego kiedy szukam wskaźnik sprawie dokumentacji roxygen lub innych podstawowych zadań.

Gonić
źródło
Dzięki. W szczególności devtools wiki ma wiele świetnych pomysłów.
Jeromy Anglim
@Jeromy - Po przeczytaniu ostatnich postów na temat powtarzalnych badań itp. (Uber uber pomocny, więc dziękuję!) Oznacza, że ​​bardzo szybko przejdziesz do roxygen. Powinienem również wspomnieć, że Eclipse obsługuje składnię roxygen i uczynił to dość łatwym przejściem. Najtrudniejszym zadaniem, które przezwyciężyłem, jest pisanie winiet, które są użyteczne i produktywne. Wyobrażam sobie, że zaczynasz od znacznie wyższego punktu skoku niż ja pod tym względem.
Chase
2
Po prostu nie czytaj źródła ggplot2. To sprawi, że twój mózg
zacznie
co za uczciwy programista R.
Leo5188,
7

Dlaczego nie zastosować empirycznego podejścia do losowego próbkowania? Po prostu wybierz kilka i sprawdź, która praca jest dla Ciebie.

Żartuję na bok, po prostu spójrz na kilka pakietów, których sam używasz i które znasz. Pobieranie ich jest łatwe, a jeśli wolisz, możesz je również wyświetlić za pośrednictwem interfejsu internetowego w R-Forge, RForge lub Github.

Najprawdopodobniej skończysz z różnymi pakietami różnych pomysłów. Niektóre mogą ci pomóc w sposobie integracji, powiedzmy, winiety. Niektóre mogą pomóc w skompilowaniu kodu. Lub testy jednostkowe. Lub Roxygen. Jest ich około 2600, więc po co mieć obsesję na punkcie jednego najlepszego?

Dirk Eddelbuettel
źródło
Świetne punkty. Planowałam odkryć siebie. Oczywiście eksploracja to połowa zabawy. Zgadzam się, że różne pakiety uczą różnych rzeczy. Zgadzam się, że wiele pakietów byłoby dobrym punktem wyjścia. Zaktualizuję moje pytanie, aby odzwierciedlić pomysł, że wiele pakietów spełnia kryteria. Ale posiadanie konkretnych sugestii może zaoszczędzić trochę czasu dla siebie i innych nowych pakietów R. Myślę również, że uznani programiści pakietów R są w lepszej sytuacji, aby komentować zalety danego pakietu na potrzeby uczenia się.
Jeromy Anglim,
2
bo musisz gdzieś zacząć :)
hans0l0
2

Kolejną wskazówką może być przyjrzenie się pakietom, na których zależy Twój oddział lub interakcji, szczególnie jeśli implementują niektóre elementy, o których wspomniał Joshua Ulrich lub zostały napisane przez znanych autorów. Pomocne może być nauczenie się, jak się robi rzeczy w twojej dziedzinie, aby zapewnić pewną kompatybilność. Często ludzie pomyślą o pewnych problemach, a przeczytanie ich rozwiązania może być pomocne.

Laurent
źródło
1

Poleciłbym pakiet przekształcania Hadleya. możesz znaleźć źródło na https://github.com/hadley/reshape

Ramnath
źródło
2
Dzięki. Dlaczego to polecasz?
Jeromy Anglim
4
Nie polecam przekształcania - nawet nie rozumiem, jak to działa. Reshape2 jest znacznie lepszy i działa zgodnie z wieloma dobrymi zasadami rozwoju.
hadley,