Zaawansowane uczenie maszynowe:
język R


As for elegance, R is refined, tasteful, and beautiful. When I grow up, I want to marry R.
-- Andy Bunn (wypowiedź na liście dyskusyjnej R-help, maj 2005)

Jednym z możliwych środowisk realizacji prac implementacyjnych i badawczych w ramach projektu z ZUM jest język R. Decydując się na jego użycie wykonawcy projektu dodatkowo zdobywają doświadczenie w posługiwaniu się bardzo elastycznym środowiskiem analitycznym o bogatej funkcjonalności, które jest stosowane w wielu badawczych i praktycznych pracach dotyczących analizy danych i tworzenia modeli predykcyjnych i mimo rosnącej popularności środowiska języka Python pozostaje dla niego interesującą alternatywą.

Podstawowe informacje

Język R jest opracowaną w ramach projektu GNU "wolną" wersją języka S. Jest to środowisko do analizy danych obejmujące:

Język R jest dostępny w postaci kodu źródłowego oraz skompilowanych pakietów binarnych na platformy Linux, OS X, Windows. Więcej informacji o języku R można znaleźć na stronach CRAN (The Comprehensive R Archive Network), gdzie dostępne są pakiety źródłowe i binarne, dokumentacja, oraz obszerne zasoby bibliotek.

Pierwsze kroki

Każda osoba z doświadczeniem programistycznym może w krótkim czasie opanować umiejętność programowania w języku R. Dostępne w nim wyrażenia i struktury sterowania odpowiadają tym, które są doskonale znane z większości języków programowania ogólnego przeznaczenia, a drobne różnice składniowe nie są istotną przeszkodą. Szczególnej uwagi wymagają pewne specyficzne mechanizmy języka, w znakomity sposób ułatwiające manipulacje na danych w postaci tabelarycznej, oraz bogaty zestaw funkcji bibliotecznych.

Najlepszą metodą przyswojenia sobie podstaw języka R jest przestudiowanie i przećwiczenie jednego z dostępnych kursów lub podręczników, np.:

W trakcie samodzielnego korzystania z języka przydatne mogą być materiały referencyjne, np.:

Poza tym pomoc dostępna dla operatorów języka i funkcji bibliotecznych jest w większości przypadków faktycznie pomocna. W tworzeniu pakietów języka R pomoże artykuł Creating R packages: A Tutorial.

Rozpoczynając korzystanie z języka R szczególną uwagę należy zwrócić na następujące elementy:

  1. podstawowe typy i struktury danych (liczba, napis, faktor, wektor, macierz, data frame),
  2. czytanie i zapisywanie plików z danymi (funkcje read.table, write.table),
  3. operatory arytmetyczne i logiczne języka oraz ich interpretacja dla danych skalarnych, wektorowych i macierzowych,
  4. podstawowe manipulacje na danych (w tym indeksowanie wektorów, macierzy, data frame),
  5. wywoływanie funkcji (przekazywanie parametrów, dostęp do zwracanych wyników, stosowanie funkcji do wektora argumentów -- funkcja apply itp.),
  6. instalowanie dodatkowych pakietów z archiwów CRAN (np. funkcja install.packages) i dostępu do ich funkcji (funkcja library) oraz zbiorów danych (funkcja data),
  7. definiowanie funkcji,
  8. reguły zasięgu zmiennych.

Interesujące pakiety

Ze względu na zakres wykładu i projektu z ZUM uwagę zasługują m.in. następujące pakiety języka R:

Ładowanie pakietu odbywa się za pomocą funkcji library. Listę zainstalowanych pakietów można sprawdzić wywołując tę funkcję bez argumentów. Listę wszystkich nazw (funkcji i zmiennych) udostępnianych przez załadowany pakiet można sprawdzić wywołując funkcję ls z argumentem postaci "package:nazwa_pakietu".

Interfejsy graficzne i środowiska deweloperskie

Siła i elastyczność języka R w największym stopniu ujawnia się przy korzystaniu z tradycyjnego interfejsu linii polecenia, istnieją jednak także interfejsy graficzne ułatwiające używanie dostępnych funkcji R, które mogą początkującym pomóc w oswojeniu się z tym środowiskiem (np. Rattle), oraz środowiska deweloperskie (IDE) ułatwiające tworzenie i uruchamianie kodu (np. RStudiom StatET).

Przykłady kodu

Jako zachętę do zapoznania się z właściwościami R jako języka programowania zamieszczam tu przykładowe pliki źródłowe ilustrujące niektóre z tych właściwości.
  1. index.R (demonstracja indeksowania wektorów i tablic)
  2. list.R (demonstracja list)
  3. noloop.R (demonstracja możliwości unikania pętli)
  4. scope.R (demonstracja leksykalnego zasięgu i domknięć)
  5. lazy.R (demonstracja leniwej ewaluacji)
  6. class.R (demonstracja klas i metod)
  7. oper.R (demonstracja przeciążania operatorów)
  8. quine.R (ciekawostka: demonstracja quine'ów)
  9. tupper.R (ciekawostka: demonstracja formuły Tuppera)

Strona przedmiotu ZUM

Paweł Cichosz