Język R umożliwia wykonanie różnorodnych zadań z minimalnym
Transkrypt
Język R umożliwia wykonanie różnorodnych zadań z minimalnym
Plan Ćwiczeń 1) Format poleceń, umieszczanie komentarzy, korekty poleceń (w przypadku bardziej skomplikowanych poleceń warto pisać je w otwartym okienku edytora i kopiować do linii poleceń R). Sposób zapisu liczb, stale logiczne i tekstowe. 2) Obliczenia z użyciem pojedynczych wyrażeń, a) operatory arytmetyczne b) - " - logiczne c) podstawowe funkcje arytmetyczne i logiczne d) funkcje tekstowe cat() i paste() 3) znajdowanie i zmiana kartoteki roboczej polecenia getwd(), setwd() 4) Konstruowanie wektorów, list i ramek danych funkcje c(), rep(), seq(), operator ":", list(), data.frame() 5) Tworzenie macierzy funkcje: matrix(), dim(), rbind(), cbind() 6) Podstawowe operacje indeksowania wektorów i macierzy 7) operacje z udziałem wektorów i macierzy np. mnożenie wektorów i macierzy przez liczby działania: wektor operator wektor macierz operator macierz mnożenie macierzy, wyznaczniki, macierze odwrotne, rozwiązywanie układów równań liniowych 8) Czytanie danych z dysku: funkcje scan() i read.table(), polecenie attach() 9) Rysowanie prostych wykresów liniowych i punktowych funkcje: plot(), curve(), points(), lines(), legend(), abline() 1-9 są krótko omówione w podręczniku K. Soetaert, bardziej szczegółowo w "an Introduction to R" , aut. W.N. Venables i D.M. Smith oraz w darmowej części podręcznika: P. Biecek „Przewodnik po pakiecie R” 10) Histogramy - funkcja hist(), wykresy kołowe pie(), boxplot() itp. 11) Statystyki opisowe mean(), max(), min(), range(), sd(),... różne przykłady można znaleźć na stronie: http://www.statmethods.net/ 11) Regresja liniowa: funkcja lm(), elementarna ocena wyników: summary(), wizualizacja: plot() przykłady dopasowywania wielomianów przy użyciu funkcji lm(), użycie funkcji I() proste przekształcenia linearyzujące regresja wielokrotna dużo przykładów można znaleźć w podręczniku: aut. John Maindonald “Using R for Data Analysis and Graphics - Introduction, Examples and Commentary" 12) Interpolacja pakiet polynom, użycie funkcji sklejanych: spline(), smooth.spline() rozdział 9 w podręczniku K. Soetaert "Using R for scientific computing 13) Budowanie wlasnych funkcji rozdział 4 w podręczniku K. Soetaert "Using R for scientific computing więcej na ten temat: rozdz. 10, str. 42 podręcznik "An introduction to R" wczytywanie bibliotek własnych funkcji: source() 14) Szukanie zer funkcji jednej zmiennej: uniroot(), rozdzial 8 w podreczniku K. Soetaert "Using R for scientific computing szukanie ekstremów: funkcja optimize() 14) Optymalizacja wielu parametrów: funkcja optim(), można się wzorować na przykładach z dokumentacji do optim wystarczy elementarny poziom, bez wchodzenia w detale procedur gradientowych, 15) Rysowanie wykresów 3-wymiarowych (1-2 przykłady) funkcja persp() bardzo dużo przykładów z kodami źródłowymi można znaleźć na stronie: http://addictedtor.free.fr/graphiques/thumbs.php Język R umożliwia wykonanie różnorodnych zadań (obliczenia, statystyka, wykresy ....) z minimalnym nakładem pracy. Tą różnorodność zawdzięczamy twórcom języka, którzy udostępniają bezpłatnie, wszystkie potrzebne narzędzia. Pisząc program w R stajemy się jego właścicielem i możemy używać go do celów komercyjnych. Taka polityka twórców R, spowodowała ogromny jego rozwój. Na serwerach w sieci www czyli w tzw. repozytoriach, dostępne są biblioteki, pozwalające jak z klocków budować własne programy. Bardzo często, jeżeli chcemy rozwiązać jakiś problem, warto sprawdzić czy ktoś już wcześniej tego nie zrobił i czy gotowe rozwiązanie nie jest łatwo dostępne. Aby korzystać z R w środowisku Windows uruchamiamy go wybierając ikonę Z języka R można korzystać w dwu trybach: wprowadzamy polecenia z konsoli lub w edytorze, tworzymy skrypty (program zawierający szereg poleceń języka R) Pierwszy sposób: Zaraz po uruchomieniu R dostępny jest tryb konsoli W tym trybie, po wpisaniu po znaku zachęty ( >| ) polecenia języka R i naciśnięciu Enter, uzyskamy natychmiastowe jego wykonanie. Napisz i naciśnij Enter: W przykładzie została obliczona wartość wyrażenia i wypisany poniżej wynik. Wynikiem jest tutaj jedna liczba, dlatego poprzedza ją indeks [1] (numer kolejny wyniku). W R domyślnie operuje się na złożonych strukturach danych zawierających wiele wartości wejściowych i/lub wiele wartości wynikowych. Stąd często wypisując jedno polecenie dostajemy cały ciąg wyników. Napisz i naciśnij Enter: Za „jednym zamachem” wykonaliśmy trzy działania (na liczbach naturalnych od 1 do 3) i dostaliśmy trzy wyniki! Spróbuj uzyskać 40 wyników dla kolejnych liczb naturalnych od 1:40. Aby oszczędzić czas na pisanie możesz zmodyfikować poprzednie polecenie „przywołując je” strzałką do góry ( ) a w wierszu polecenia przesuwając się strzałkami w poziomie i modyfikując jego treść. Napisz i naciśnij Enter: Powinieneś dostać taki wynik Na początku drugiego wiersza rezultatów został wypisany indeks [26] dla pierwszego w tym wierszu wyniku. Czyli zapisując jedno działanie na liczbach od 1 do 40 (1:40) uzyskaliśmy wektor 40 elementowy zawierający 40 wyników obliczeń. UWAGA jeżeli wpisujemy długie polecenia to mogą być zapisane w wielu wierszach. W tym celu na początku kolejnego wiersza umieszczamy znak + (znak kontynuacji poprzedniego wiersza). Zarówno dane wejściowe jak i wyjściowe możemy przechowywać w zmiennych. Zmienna to obiekt, pełniący funkcję pudełka w którym można przechowywać różne wartości (np. znaki, ciągi znaków czyli teksty, pojedyncze wartości liczbowe lub ich ciągi, wartości logiczne itp.). Napisz i naciśnij Enter: Powyżej do zmiennej WektorWejsciowy przypisano (<-) wektor (ciąg) liczb (1:40). Pisząc nazwę tego wektora, wyświetliliśmy na ekranie jego zawartość. Następnie, do nowej zmiennej WektorWyjsciowy, wstawiono (=) wyniki operacji na składowych wektora wejściowego i wyświetlono składowe wektora wynikowego. Obszar roboczy to część pamięci komputera w której przechowywane są obiekty z którymi aktualnie pracujemy w środowisku R. Bardzo często wartości liczbowe przechowujemy jako zmienne, którym nadajemy jakieś nazwy. Aby zobaczyć jakie zmienne są przechowywane w otwartym obszarze roboczym wykonujemy polecenie ls(). W trybie konsoli możemy zakończyć pracę z R wykonując polecenie q(). Zanim program (interpreter języka R) zostanie zakończony, zostaniemy zapytani czy chcemy zachować informacje o wykonywanych od jego otwarcia operacjach. Jeżeli zachowujemy te informacje (obszar roboczy – workspace), możemy podać nazwę pliku. Zapisany obszar roboczy może być w razie potrzeby ponownie wczytany (File / LoadWorkspace). Ćwiczenia 1. Oblicz wartość 2^3. (Do czego służy operator ^ ?). Jak już wiesz do czego to oblicz z jego pomocą pierwiastek kwadratowy z 9. Uwaga w R separatorem części całkowitej i ułamkowej jest kropka a nie przecinek (0.5 a nie 0,5) !!! Wartość pierwiastka umieść w zmiennej pierwiastek. 2. Liczby w postaci wykładniczej zapisujemy jako np. 1.123e-2. Logarytm dziesiętny jako np. log10(100) (jest jak wiadomo równy 2). Oblicz ile wynosi pH roztworu o stężeniu jonów wodorowych równym podanej liczbie wykładniczej. Wartość umieść w zmiennej pH. 3. Ile zmiennych jest zdefiniowanych w obszarze roboczym ? Jakie są ich wartości ? Drugi sposób: Z menu w trybie konsoli wybierz File | New script Zostaje otwarte okno edytora w którym możesz zapisać wiele poleceń, koniecznych do realizacji Twojego zadania. Masz już dwa okna a może ich być jeszcze więcej. Wybierając Windows | Tile Vertically , uzyskasz „ogląd” wszystkich okien rozmieszczonych w pionie. Pakiety (packages) to biblioteki „gotowców” – skryptów które wykonują określone działania np. rysowanie wykresów, wysyłanie poczty, obliczenia statystyczne itp. Jeżeli pierwszy raz korzystamy z jakiegoś pakietu to musimy go zainstalować poleceniem install.packages("NazwaPakietu", dependencies = TRUE) Odtąd pakiet razem z wszystkimi jego funkcjami będzie znajdował się w folderze library na Twoim dysku. Aby użyć funkcji z tego pakietu musisz wcześniej włączyć go (załadować) do swojego programu poleceniem library(NazwaPakietu) Przydatne pakiety: • Rcmdr - pakiet z GUI pozwalającym na przeprowadzenie większości podstawowych statystyk bez znajomości nazw funkcji, • stats - pakiet z większością podstawowych funkcji statystycznych, • graphics - pakiet z funkcjami do rysowania wykresów. Po każdym uruchomieniu platformy R, ładowane są pakiety podstawowe takie jak base, graphics, stats i tych nie trzeba ładować. Pomoc w R ?nazwa.funkcji - wyświetla informacje o danej funkcji, args(nazwa.funkcji) - wyświetla listę argumentów dla danej funkcji, example(nazwa.funkcji) - uruchamia skrypt z przykładowymi wywoływaniami poszczególnych funkcji, na początek proszę sprawdzić example(plot), help.search(slowo.kluczowe) - przegląda opisy funkcji znajdujących się w zainstalowanych pakietach i wyświetla te w których znaleziono zadane slowo.kluczowe. W liście wyników znajduje się również informacja w którym pakiecie znajdują się znalezione funkcje. R po polsku http://rpubs.com/zkarpinski/kalkulator http://rpubs.com/zkarpinski/wektory_licz http://rpubs.com/zkarpinski/wektorycd http://rpubs.com/zkarpinski/matrices http://rpubs.com/zkarpinski/data_import http://rpubs.com/zkarpinski/barplots RStudio F2 w Rstudio otwiera dokumentację np. funkcji Ctrl+Enter wykonuje zaznaczone polecenia Tab uzupełnia kod, dopisuje argumenty Ctrl+Up ostatnie polecenia lub polecenia zawierające ciągi znaków w aktualnym wierszu w nagłówku okna konsoli podana jest ścierzka do katalogu roboczego Ctrl+1 — Przenosi do Edytora R Ctrl+2 — Przenosi do okna Console Ctrl+L — Czyści okno Console Esc — Przerywa wykonanie R Na zakończenie pracy wykonaj savehistory("KowalskiJ”) i wyślij utworzony w ten sposób plik jako załącznik na adres prowadzącego ([email protected]). Oczywiście zmień Kowalski na swoje nazwisko a J na inicjał swojego imienia (uwaga nazwy bez polskich znaków diakrytycznych), czyli załącznik wysłany przez Łucję Włodek będzie nosił nazwę WlodekL. Plik znajdziesz w folderze z którego uruchamiałeś R (na ogół bin). Składnia języka R Obiekty Wszystko na czym można operować w języku R jest obiektem. Obiekty można podzielić na kilka typów: Liczba. Dozwolona jest notacja naukowa (np. 2.5e3), separatorem części całkowitej i ułamkowej jest kropka (np. 0.123 a nie 0,123). Łańcuchy znaków są rozpoczynane i kończone znakiem ’ lub " (np. ”kot” i ‘krowa’ to łańcuchy znaków). Typ logiczny. Obiekty tego typu przechowują jedną z dwóch wartości. Logiczna prawda to T lub TRUE, logiczny fałsz to F lub FALSE. Wektor to uporządkowany zbiór obiektów tego samego typu. Konstruktorem wektora (sposobem na utworzenie obiektu typu wektor) jest deklaracja c(). (Deklaracja to zapis informujący o tworzeniu nowego obiektu np. wektora, listy....). Przykładowo zbudujemy wektor: trzech liczb c ( 4 , 5 , 6 ) czterech łańcuchów c(‘Ala’,’Ola’,’Kamil’,’Jerzy’) pięciu wartości logicznych (np. odpowiedzi na pytania w kwestionariuszu) c(T,F,F,T,F) Lista to uporządkowany zbiór różnych elementów. Elementy w liście mają własne nazwy. Konstruktorem listy jest deklaracja list(). Przykładowa konstrukcja listy czterech obiektów to l i s t (imie=c ( ”Anna” , ”Teresa” ) , nazwisko=”Kowalska ” , wiek=20, blondyn.ka=T) (w tej liście zawarta jest informacja personalna o imionach, nazwisku, wieku i czy jest blondynem/ką) Macierz. Konstruktorem macierzy dwuwymiarowej (wiersze i kolumny) jest deklaracja matrix(). Macierz o wymiarach 4x2 (cztery wiersze, dwie kolumny), wypełnioną zerami można skonstruować poleceniem matrix ( 0 , 4 , 2 ) Ramka danych to macierz, w której elementy w kolumnie są tego samego typu. Konstruktorem jest deklaracja data.frame(). Przykład ramki: data . frame( nr=c ( 1 0 0 , 1 0 1 , 1 0 2 ) , wiek=c ( 2 5 , 2 1 , 2 2 ) , mezcyzna=c (T,T,F) ) (w ramce zawarta jest informacja z ewidencji osób, posiadających trzy kolejne numery, ich wieku oraz płci. Uwaga w nazwie nie można użyć znaków diakrytycznych – nie może być mężczyzna ) Typ wyliczeniowy. Stosowany do przechowywania wartości występujących na kilku poziomach (np. w wojsku jest tylko kilka stopni służbowych). Konstruktorem jest deklaracja factor(). Utworzymy wektor trzech elementów typu wyliczeniowego z dwoma poziomami: factor ( c ( ” s i e r z a n t ” , ” kapitan ” , ” s i e r z a n t ” ) ) . Typ funkcyjny. Jej konstruktorem jest deklaracja function. Przykład funkcji: function(a,b){a*b} Zadeklarowana funkcja, obliczy pole prostokąta o bokach podanych jako argumenty w nawiasach okrągłych. Wzór na obliczenie jej wartości (ciało funkcji) zawarty jest w nawiasach falistych. Funkcji obliczającej pole prostokąta, przypisana została nazwa S. Po wywołaniu funkcji S z podanymi argumentami, wypisana została jej wartość. Konwersje Najczęstsze konwersje to zamiana na typ znakowy (funkcja as.character) lub na typ liczbowy (funkcja as.numeric). Konwertować można złożone struktury takie jak lista lub macierz, w tym przypadku konwertowany jest każdy element listy lub macierzy. Konwertować można też strukturę obiektu, np. funkcjami as.matrix, as.list, as.logical. Uwaga!!! Konwertując etykiety typu wyliczeniowego na typ liczbowy należy być ostrożnym, zaskakującym może być wynik takiej konwersji, np. > as . numeric( factor ( c ( −2 ,2) ) ) [1]12 Bardziej oczekiwany wynik uzyskamy konwertując „po drodze” dany obiekt na typ znakowy > as . numeric( as . character ( factor ( c ( −2 ,2) ) ) ) [ 1 ] −2 2 Zmienne Nazwa zmiennej powinna rozpoczynać się literą, może składać się z liter, cyfr lub symbolu kropki. Istotna jest wielkość liter, a więc zmienne x i X to dwie różne zmienne. Do zmiennej przypisać można wartość jednym z trzech operatorów przypisania -> przypisuje wartość znajdującą się z lewej strony do zmiennej po prawej stronie <- lub = przypisuje wartość znajdującą się z prawej strony do zmiennej po lewej stronie. Sprawdź co się stanie w wyniku wykonania poniższych instrukcji: c (13 , 13) −> zmienna . z . kropka imie <- ”Ola” i=4