KSAP / Podstawy programowania w R. Michał Ramsza

Podobne dokumenty
Podstawy wykorzystania języka R

Modelowanie rynków finansowych z wykorzystaniem pakietu R

1. Indeksy/indeksowanie : Do elementów wektora, list, macierzy czy ramek, można się odwołać na kilka sposobów.

> x <-seq(-2*pi, 2*pi, by=0.5) > plot(x, sin(x), type="b",main="wykres funkcji sin(x) i cos(x)", col="blue") > lines(x, cos(x), type="l",col="red")

Pakiety Matematyczne - R Zestaw 2.

Otwórz R. Zmień katalog roboczy za pomocą File/Change Dir. Wczytaj plik przypisując go obiektowi o nazwie students:

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy statystyki i obsługa SPSSa na przykładach z ekonomii

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Instalacja Pakietu R

Środowisko R wprowadzenie c.d. Wykład R2; Struktury danych w R c.d.

Przykład 1: Funkcja jest obiektem, przypisanie funkcji o nazwie function() do zmiennej o nazwie funkcja1

Podstawy MATLABA, cd.

Język C, tablice i funkcje (laboratorium, EE1-DI)

Matlab, zajęcia 3. Jeszcze jeden przykład metoda eliminacji Gaussa dla macierzy 3 na 3

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Wprowadzenie do środowiska programistycznego R (na podst. 1) R jako kalkulator

do MATLABa programowanie WYKŁAD Piotr Ciskowski

Krzysztof Trajkowski. Przegląd pakietów do optymalizacji liniowej

Wprowadzenie do Pakietu R dla kierunku Zootechnika. Dr Magda Mielczarek Katedra Genetyki Uniwersytet Przyrodniczy we Wrocławiu

Plan Ćwiczeń. 3) znajdowanie i zmiana kartoteki roboczej polecenia getwd(), setwd()

Materiał dotyczy generowania różnego typu wykresów w środowisku R.

Wykresy i interfejsy użytkownika

1 Programowanie w matlabie - skrypty i funkcje

Podstawy Programowania C++

Matlab Składnia + podstawy programowania

Podstawy Programowania Podstawowa składnia języka C++

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

R dla każdego : zaawansowane analizy i grafika statystyczna / Jared P. Lander. Warszawa, Spis treści

Programowanie obiektowe

Wprowadzenie do R. log(1) ## [1] 0. sqrt(3) ## [1] sin(x = 2*pi) ## [1] e-16

Wprowadzenie do Scilab: funkcje i wykresy

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Elementy statystyki STA - Wykład 1

Język C, tablice i funkcje (laboratorium)

Plik->Opcje->Zakladka Główne->Dostosuj Wstążkę Zaznaczamy kwadracik Developer na liscie po prawej stronie. Klikamy OK.

Cw.12 JAVAScript w dokumentach HTML

zajęcia 2 Definiowanie wektorów:

Wizualizacja funkcji w programie MATLAB

1. Operacje na plikach i katalogach Chcąc przeprowadzić analizę danych należy załadować/wczytać dane do R, a wyniki z pewnością chcemy zapisać.

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

1. Operacje na plikach i katalogach Chcąc przeprowadzić analizę danych należy załadować/wczytać dane do R, a wyniki z pewnością chcemy zapisać.

Ćwiczenie 1. Wprowadzenie do programu Octave

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

Metody numeryczne Laboratorium 2

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Krótki kurs JavaScript

Język R : kompletny zestaw narzędzi dla analityków danych / Hadley Wickham, Garrett Grolemund. Gliwice, cop Spis treści

WYDZIAŁ ELEKTROTECHNIKI, AUTOMATYKI I INFORMATYKI INSTYTUT AUTOMATYKI I INFORMATYKI KIERUNEK AUTOMATYKA I ROBOTYKA STUDIA STACJONARNE I STOPNIA

pozwala na tworzenie i upowszechnianie pakietów implementujących nowe funkcjonalności. Obecnie dostępnych jest blisko 1000 pakietów do różnorodnych

Podstawy programowania w R - część 1

lekcja 8a Gry komputerowe MasterMind

Podstawy programowania skrót z wykładów:

Matlab Składnia + podstawy programowania

LibreOffice Calc VBA

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

LABORATORIM BIOINFORMATYKI

Platformy Programistyczne Podstawy języka Java

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

JAVAScript w dokumentach HTML - przypomnienie

Podstawy JavaScript ćwiczenia

Materiały do laboratorium MS ACCESS BASIC

Wstęp do Programowania Lista 1

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

MATLAB tworzenie własnych funkcji

Przetwarzanie i analiza danych w języku Python / Marek Gągolewski, Maciej Bartoszuk, Anna Cena. Warszawa, Spis treści

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

SAS Podstawowe informacje przed ćwiczeniem 1

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

1 Przygotował: mgr inż. Maciej Lasota

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Krótka instrukcja opracowania danych w programie SciDAVis v. 1-D013-win

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Technologie informacyjne: Excel i Python

INFORMATYKA W SELEKCJI

-Instalacja R: -Instalacja RStudio:

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Tworzenie i korzystanie z plików JAR. Biblioteka JFreeChart

Podstawowe operacje graficzne.

Wartości x-ów : Wartości x ów można w Scilabie zdefiniować na kilka sposobów, wpisując odpowiednie polecenie na konsoli.

Laboratorium 7 Blog: dodawanie i edycja wpisów

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

PHP: bloki kodu, tablice, obiekty i formularze

Bash - instrukcje warunkowe, pętle i funkcje

Przykładowo, jeśli współrzędna x zmienia się od 0 do 8 co 1, a współrzędna y od 12 co 2 do 25, to punkty powinny wyglądać następująco:

UNIWERSYTET RZESZOWSKI KATEDRA INFORMATYKI

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

Pętle iteracyjne i decyzyjne

Umieszczanie kodu. kod skryptu

Programowanie w Ruby

Instrukcja laboratoryjna nr.3

4. Funkcje. Przykłady

Metody Numeryczne. Laboratorium 1. Wstęp do programu Matlab

Bloki anonimowe w PL/SQL

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

JAVAScript w dokumentach HTML (1)

Transkrypt:

KSAP / Podstawy programowania w R Michał Ramsza 1

Spis treści 2

1 Pierwszy skrypt Celem tego punktu jest stworzenie pierwszego skrypu, który zawiera typowe kroki do analizy danych: wczytania danych, wykonania analizy, zapisania wyników przeprowadzonej analizy. 1.1 Prosta analiza danych stworzenie histogramu Poniżej jest przykład prostego skryptu obrazującego wykorzystanie funkcji hist(). Skrypt składa się z dwóch elementów: (a) stworzenia danych; (b) stworzenia wykresu 1 ### Tworzenie danych 2 n <- 10^4 3 x <- rnorm ( n, 0, 1) 4 5 ### Tworzenie prostego wykresu 6 hist ( x, freq = FALSE, 7 col = "# AAFFCC ", 8 main = "To jest tytul ", 9 xlab = " napis na dole ", 10 ylab = " napis z boku ") 11 grid () 12 lines ( density ( x), col = " red ", 13 lwd = 2, 14 lty = " dashed " ) 1.2 Zapisywanie i wczytywanie danych 1.2.1 Zapisywanie wykresów do pliku Poniższy skrypt pokazuje w jaki sposób można zapisać wykresy do plików graficznych. 1 ### Tworzenie danych 2 n <- 10^4 3

3 x <- rnorm ( n, 0, 1) 4 5 ### Otwieranie pliku 6 png ( file = " rys1. png ") 7 8 ### Tworzenie prostego wykresu 9 hist ( x, freq = FALSE, 10 col = " yellow ", 11 main = "To jest tytul ", 12 xlab = " napis na dole ", 13 ylab = " napis z boku ") 14 grid () 15 lines ( density ( x), col = " red ", 16 lwd = 2, 17 lty = " dashed " ) 18 19 ### Zamykanie pliku 20 dev. off () W powyższym skrypcie ważne aby każde wywołanie funkcji png() było zakończone wywołaniem funkcji dev.off(). Wszystko to, co ma znaleźć się w pliku musi zostać obliczone po wywołaniu funkcji png() a przed wywołaniem funkcji dev.off(). 1.2.2 Zapisywanie danych liczbowy do pliku CSV 1 ### Tworzenie przykladowych danych 2 n <- 10 # liczba wierszy 3 dane <- data. frame ( " kolumna A" = rnorm ( n, 0, 1), " kolumna B" = rbinom ( n, 10,.5) ) 4 5 ### Zapisywanie danych 6 write. csv2 ( file = " dane. csv ", dane ) 1.2.3 Wczytywanie danych z pliku CSV 1 ### Wczytywanie danych 4

2 d <- read. csv2 ( file = " dane. csv ") 3 4 ### Wykorzystanie wczytanych danych 5 mean ( d$ kolumna.a) 6 mean ( d$ kolumna.b) 1.3 Obsługa plików XLSX 1.3.1 Wczytywanie 1 ### Wgranie pakietow 2 require ( readxl ) 3 4 ### Sprawdzenie listy skoroszytow 5 zeszyty <- excel _ sheets ( path = "./ dane. xlsx ") 6 zeszyty 7 8 ### Wgranie skoroszytow 9 dane1 <- read _ excel ( path = "./ dane. xlsx ", sheet = zeszyty [1]) 10 dane2 <- read _ excel ( path = "./ dane. xlsx ", sheet = zeszyty [2]) 11 12 dane1 13 head ( dane2 ) 14 dane1 $ dane 15 dane2 $ wymiar 1.3.2 Zapisywanie 1 ### Tworzenie danych 2 data <- data. frame ( 3 " pozycja " = 1:10, 4 " wartosc " = rnorm (10, 0, 1) 5 ) 6 data 7 8 ### Wczytanie pakietu 9 require ( xlsx ) 5

10 11 ### Gdyby to dzialalo to mozna zapisac do XLSX 2 Struktury danych (podstawowe) 2.1 Wektory Wektory to podstawowa struktura danych w R. Poniższy skrypt pokazuje podstawowe tworzenie wektorów, podstawowe operacje na wetkorach i przykładowe wykorzystanie. 1 ### Tworzenie wektorow 2 x <- c( 123, 11, 34, 56) 3 x 4 y <- rnorm ( 100) 5 y 6 7 ### Funkcje do generowania wektorow 8 1:10 9 1.1:10 10-5:5 11 5: -5 12 13 seq ( 0, 1, 0.1) 14 seq ( 0, 1, length. out = 13) 15 16 rep ( 1:3, 5) 17 18 ### Dzialania na wektorach 19 x <- 1:5 20 x 21 length ( x) 22 sort ( x) 23 sample ( x) 24 min (x) 25 max ( x) 26 range ( x) 6

27 28 x^2 29 x/2 30 log ( x) 31 2*x 32 33 x 34 y <- sample ( x) 35 y 36 37 ### Dodawanie wektorow i recycling rule 38 a <- c(1, 2, 3, 4) 39 a + c (0,1) 40 41 ### 1 2 3 4 42 ### 0 1 0 1 43 ### 1 3 3 5 44 45 ### Przykladowe wykorzystanie do stworzenia wykresu kwartalnego 46 n <- 100 47 dane <- rnorm (n * 4) + c (1,2,3,4) 48 49 plot (x = jitter ( rep (1:4, n)), 50 y = dane, 51 pch = 20, 52 type = "p", 53 col = rgb (1, 0, 0,.5) 54 ) 55 56 abline ( v = 1:3+.5, lty = " dashed ") 57 58 ### Typy przechowywane w wekorze : dowolne ale tylko jeden na raz 59 c (1,5,6) 60 c(1,5,6, " ala ") Drugą ważną sprawą jest indeksowanie wektorów. 1 ### Tworzenie przykladowego wektora 7

2 x <- 5:1 3 x 4 5 ### Indeksowanie przez podanie pozycji 6 x [1] 7 x [4] 8 x[c (1,4) ] 9 x[c (4,1) ] 10 x[c(1,1,1,4,4,4,4,1,1,1,4,4,4,1,1,1)] 11 y <- x [ 1: 3] # zapisanie wyniku selekcji w nowej zmiennej 12 x [2:4] 13 x[ rbinom ( 10, 4,.5) +1] 14 x [0] # to nie istnieje, pozycje sa numerowane od 1 15 16 dir () [1:4] 17 18 ### Indeksowanie przez podanie wektora logicznego 19 TRUE 20 FALSE 21 22 ind <- c( TRUE, FALSE, TRUE ) 23 ind 24 x <- c(6, 3, 2) 25 x 26 x[ ind ] 27 28 x[x > 2] 29 30 x <- rnorm ( 30, 0, 1) 31 mean ( x[x > 0]) 32 mean ( x[x < 0]) 33 34 ### Przyklad 35 area <- rnorm (10, 100, 50) 36 area 37 res <- rnorm ( 10, 10, 1) 38 res 39 8

40 mean ( res [ area > 100]) 41 mean ( res [ area < 100]) 42 43 ### Przyklad 44 x <- rnorm (100, 0, 1) 45 x 46 x[x >0 & x <1] 47 x[x < -1 x > 1] 48 49 ### Przyklad 50 n <- 20 51 area <- rnorm ( n, 100, 50) 52 area 53 res <- rnorm ( n, 0, 10) 54 res 55 nazwa <- replicate ( n, paste ( sample ( letters, 10), collapse = "")) 56 nazwa 57 58 duzeobszary <- area > 100 59 deficyt <- res < 0 60 61 nazwa [ duzeobszary & deficyt ] 62 nazwa [! duzeobszary & deficyt ] 63 64 res [ duzeobszary & deficyt ] 65 66 barplot ( 67 height = - res [ duzeobszary & deficyt ], 68 names. arg = nazwa [ duzeobszary & deficyt ], 69 horiz = FALSE ) 70 71 ### Indeksowanie przez nazwe 72 x <- c (100, 200, 150) 73 names ( x) <- c(" powiat 1", " powiat 2", " powiat 3") 74 x 75 x[" powiat 2"] 9

2.2 Listy Listy są drugą podstawową strukturą danych w R. Jest to również często podstawa do konstruowania obiektów w modelu S3. 1 ### Tworzenie podstawowych list 2 x <- list ( powiatid = " id83756 ", powierzchnia = 230, ludnosc = 30) 3 x 4 5 ### Selekcja z listy po nazwie slotu 6 x$ powiatid 7 x$ powierzchnia 8 9 ### Jak sie dodaje sloty? 10 x <- c( x, list ( smog = TRUE )) 11 x 12 13 ### Jak sie usuwa sloty? / Jak sie zmienia wartosci na slotach? 14 x$ smog <- NULL 15 x 16 x$ ludnosc <- 50 17 x 18 19 ### Indeksowanie przez podanie pozycji slotu 20 x [1] # zwraca liste 21 x [[ 1]] # zwraca wartosc slotu 2.3 Ramki danych Z technicznego punktu widzenia ramka danych to lista ale jest ona inaczej interpretowana. Poniżej jest przykład pracy ramkami danych. 1 ### Tworzenie ramki danych 2 n <- 20 3 dane <- data. frame ( 4 nazwa = replicate ( n, paste0 ( sample ( letters, 5), collapse = "")), 10

5 powierzchnia = rnorm ( n, 100, 50), 6 ludnosc = rnorm ( n, 10000, 3000) 7 ) 8 head ( dane ) 9 typeof ( dane ) 10 11 ### Dodawanie kolumny 12 dane <- cbind ( 13 dane, 14 data. frame ( deficyt = rnorm ( n, 0, 30) ) 15 ) 16 head ( dane ) 17 18 nowedane <- data. frame ( 19 nazwa = replicate ( n, paste0 ( sample ( letters, 5), collapse = "")), 20 powierzchnia = rnorm ( n, 100, 50), 21 ludnosc = rnorm ( n, 10000, 3000), 22 deficyt = rnorm ( n, 0, 30) 23 ) 24 25 dane <- rbind ( dane, nowedane ) 26 dane 27 28 ### Indeksowanie ramki danych 29 names ( dane ) 30 dane $ ludnosc 31 dane $ deficyt 32 33 dane [1:10, ] 34 dane [c(1, 10, 20), ] 35 dane [c(1, 10, 20), c(1, 3)] 36 dane [c(1, 10, 20), c(1, 3, 4)] 37 dane [c(1, 10, 20), c( " ludnosc ", " deficyt ")] 38 dane [ dane $ deficyt < 0 & dane $ ludnosc > 13000, ] 39 dane [ dane $ deficyt < 0 dane $ ludnosc > 13000, ] 40 41 zbior1 <- dane [ dane $ deficyt < 0 & dane $ ludnosc > 13000, ] 42 barplot ( height = zbior1 $ deficyt, names. arg = zbior1 $ nazwa, 11

43 density = 20, angle = 45) Proste wykorzystanie modelu regresji liniowej. Model wykorzystuje dane zapisane w ramce danych i zwraca wynik w postaci listy. 1 ### Wgranie danych 2 data ( cars ) 3 head ( cars ) 4 names ( cars ) 5 ls () 6 ### rm( list = ls ()) 7 8 plot ( cars, pch = 20) 9 model <- lm( dist ~ +1 + speed, data = cars ) 10 summary ( model ) 11 abline ( model, lwd = 2) 12 13 model2 <- lm( dist ~ -1 + I( speed ^2), data = cars ) 14 summary ( model2 ) 15 plot ( cars, pch = 20) 16 x <- seq ( min ( cars $ speed ), max ( cars $ speed ), 1) 17 y <- model2 $ coefficients * x ^2 18 lines ( x = x, y = y, col = " red ") 3 Kontrolowanie wykonania programu 3.1 Wykonania warunkowe Najprostsza kontrola wykonywania programu to zastosowanie konstrukcji if(){}. Poniżej przykład zastosowania takiej konstrukcji. 1 ### Proste wykonanie warunkowe / blok kodu 2 x <- -5 3 if( x > 0 ){ 4 print ( " Zmienna x jest dodatnia ") 12

5 } 6 7 ### Bardziej skomplikowany warunek 8 x <- 3 9 y <- 3 10 if( x > 0 & y > 0 ){ 11 print ( " Zmienna x jest dodatnia i zmienna y tez jest dodatnia ") 12 } 13 14 x <- 3 15 y <- -3 16 if( x > 0 y > 0 ){ 17 print ( " Warunek jest spelniony ") 18 } 19 20 x <- -3 21 y <- -3 22 if(!(x > 0 y > 0) ){ 23 print ( " Warunek jest spelniony ") 24 } 25 26 ### Uwaga, ponizsza konstrukcja nie jest bezpieczna 27 x <- 2 28 if( x == 2L ){ 29 print ( " Warunek jest spelniony ") 30 } 31 32 ### Konstrukcja znacznie bezpieczniejsza 33 x <- 2L 34 if( identical ( x, 2L) ){ 35 print ( " Warunek jest spelniony ") 36 } 37 38 ### Porownanie wektorow 39 x <- c(1, 2) 40 y <- c(1, 2, 3) 41 if( x == y){ 42 print ( " Warunek jest spelniony ") 13

43 } 44 45 if( identical ( x, y)){ 46 print ( " Warunek jest spelniony ") 47 } Warunek z alternatywą 1 ### Prosta konstrukcja warunku z alternatywa 2 x <- -2 3 if( x > 0){ 4 print ( " Zmienna x jest dodatnia ") 5 } else { 6 print ( " Zmienna x nie jest dodatnia ") 7 } Warunek, który pozwala obsłużyć wiele możliwości. 1 ### Pierwsza metoda 2 x <- 3 3 switch ( x, 4 { print ( "To jest blok 1")}, 5 { print ( "To jest blok 2")}, 6 { print ( "To jest blok 3")} 7 ) 8 9 ### Druga metoda 10 x <- " alert " 11 switch ( x, 12 " normalna " = { print ( " Kod osluguje sytuacje normalna ")}, 13 " nietypowa "= { print ( " Kod obsluguje sytuacje nietypowa ")}, 14 " alert " = { print ( " Tutaj cos sie sypie ")} 15 ) Wektorowe warsja if() to funkcja ifelse(), która jest znacznie szybsza. 1 ### Podstawowe wykorzystanie 2 x <- rnorm ( 20) 3 y <- rep ( 0, length ( x)) 14

4 ifelse ( x > 0, x, y) 5 6 ### T T T F F T F 7 ### x x x x x x x 8 ### y y y y y y y 9 ### x x x y y x y 3.2 Pętle Najprostsza pętla to pętla for(){}. Poniżej przykład wykorzystania takiej pętli. 1 ### Proste wywolanie for () {} 2 for ( k in 1:10) { 3 print ( k ^2) 4 } 5 6 ### Iterowanie po znakach 7 for ( a in letters ){ 8 cat ( a) 9 } 10 11 ### Wypisanie wszystkich plikow w danych katalogu 12 for ( plik in dir ()){ 13 print ( plik ) 14 } Przykład. Skrypt, który w katalogu roboczym tworzy katalog dane, zmienia katalog roboczy na katalog dane, tworzy tam 100 plików z losowymi danymi i o losowych nazwach w formacie CSV, zmienia katalog roboczy na początkowy katalog roboczy. 1 ### Tworzenie katalogu zawierajacego dane 2 katalogdane <- " dane " 3 if(! dir. exists ( katalogdane )){ 4 dir. create ( katalogdane ) 5 } 6 7 ### Ustawianie nowego katalogu roboczego 15

8 oryginalnykatalogroboczy <- setwd ( katalogdane ) 9 10 ### Tworzenie losowych plikow z danymi 11 liczbaplikow <- 100 12 13 for ( k in 1: liczbaplikow ){ 14 15 ## Tworzenie nazwy pliku 16 nazwapliku <- paste0 ( " dane _", as. character ( k), ". csv ") 17 18 ## Tworzenie przykladowych danych 19 dane <- data. frame ( " wartosci " = rnorm ( 10) ) 20 21 ## Zapisywanie danych do pliku 22 write. csv ( file = nazwapliku, dane ) 23 24 } 25 26 ### Ustawianie poczatkowego katalogu roboczego 27 setwd ( oryginalnykatalogroboczy ) Przykład wykorzystujący stworzone powyżej dane. Zadanie polega na tym aby wczytać zdane ze wszystkich plików i na tej podstawie stworzyć histogram. 1 ### Parametry skryptu 2 katalogdane <- " dane " 3 4 ### Ustawianie katalogu roboczego na katalog z danymi 5 oryginalnykatalogroboczy <- setwd ( katalogdane ) 6 7 ### Wczytanie danych 8 plikidane <- list. files ( pattern = ". csv ") # wektor nazw plikow z danymi 9 wczytanedane <- data. frame ( c(), " wartosc " = c()) 10 for ( plik in plikidane ){ 11 d <- read. csv ( plik ) 12 wczytanedane <- rbind ( wczytanedane, d) 13 } 14 16

15 ### Powracanie do oryginalnego katalogu roboczego 16 setwd ( oryginalnykatalogroboczy ) 17 18 ### Analiza danych 19 hist ( wczytanedane $ wartosci, freq = FALSE, angle = 45, density = 20, 20 main = " Analiza danych ", xlab = "", ylab = "", xlim = c( -5,5)) 21 lines ( density ( wczytanedane $ wartosci ), col = " red ", lwd = 2) 22 grid () 4 Funkcje 4.1 Podstawowa definicja funkcji Aby zdefiniować funkcję wykorzystujemy konstrukcję postaci function(){}. 1 ### Definicja funkcji bez arguemntow 2 f1 <- function (){ 3 print ( " Hello world!") 4 } 5 6 ### Wywolanie funkcji 7 f1 () 8 9 ### Definicja funkcji z jednym argumentem 10 f2 <- function ( x){ 11 x^2 12 } 13 14 ### Wywolanie funkcji 15 x <- f2( 13) 16 x 17 18 ### Definicja funkcji w wieloma argumentami 19 f3 <- function ( x, y){ 20 if ( x > 0 ){ 17

21 return ( x^y) 22 } else { 23 stop ( " Funkcja jest zdefiniowana tylko dla dodatnich wartosc x" 24 } 25 } ) 26 27 ### Wywolanie 28 f3( 4, 1/2) 29 f3( 3, 2) 30 f3( -4, 1/2) Poniżej prosty przykład funkcji, która jako argument przyjmuje inną funkcję. 1 ### Prosta funkcja do tworzenia wykresow innych funkcji 2 rysujwykres <- function ( funkcja, dziedzina, liczbapunktow ){ 3 x <- seq ( min ( dziedzina ), max ( dziedzina ), length. out = liczbapunktow ) 4 y <- funkcja ( x) 5 plot ( x = x, y = y) 6 } 7 8 rysujwykres ( exp, c( -pi, pi), 100) 9 10 g <- function ( x){ sin ( x ^2) } 11 rysujwykres ( g, c( -pi, pi), 500) 4.2 Funkcje z domyślnymi wartościami argumentów 1 ### Prosta funkcja do tworzenia wykresow innych funkcji 2 rysujwykres <- function ( funkcja, dziedzina, liczbapunktow = 100) { 3 x <- seq ( min ( dziedzina ), max ( dziedzina ), length. out = liczbapunktow ) 4 y <- funkcja ( x) 5 plot ( x = x, y = y) 6 } 7 18

8 g <- function ( x){ sin ( x ^2) } 9 rysujwykres ( g, c( -pi, pi), 500) 10 rysujwykres ( g, c( -pi, pi)) 4.3 Przekazywanie argumentów 1 ### Prosta funkcja do tworzenia wykresow innych funkcji 2 rysujwykres <- function ( funkcja, dziedzina, liczbapunktow = 100,...) { 3 x <- seq ( min ( dziedzina ), max ( dziedzina ), length. out = liczbapunktow ) 4 y <- funkcja ( x) 5 plot ( x = x, y = y,...) 6 } 7 8 g <- function ( x){ sin ( x ^2) } 9 rysujwykres ( g, c( -pi, pi), 500) 10 rysujwykres ( g, c( -pi, pi), 500, type = "o", pch = 20, col = " blue ") 4.4 Wywoływanie funkcji 1 ### Prosta funkcja do tworzenia wykresow innych funkcji 2 rysujwykres <- function ( funkcja, dziedzina, liczbapunktow = 100,...) { 3 x <- seq ( min ( dziedzina ), max ( dziedzina ), length. out = liczbapunktow ) 4 y <- funkcja ( x) 5 plot ( x = x, y = y,...) 6 } 7 8 g <- function ( x){ sin ( x ^2) } 9 rysujwykres ( g, c( -pi, pi), 500) 10 rysujwykres ( g, c( -pi, pi), 500, type = "o", pch = 20, col = " blue ") 11 rysujwykres ( dziedzina = c( - pi, pi), liczbapunktow = 500, funkcja = g) 4.5 Zmienne lokalne i globalne 1 ### Czyszczenie 2 rm( list = ls ()) 19

3 ls () 4 5 ### Zmienne globalne 6 x <- 10 7 8 ### Przyklad 1 9 f1 <- function (){ 10 print ( x) 11 } 12 13 f1 () 14 15 ### Przyklad 2 16 f2 <- function ( x){ 17 print ( x) 18 } 19 20 f2( x = 50) 21 x 22 23 ### Przyklad 3 24 f3 <- function (){ 25 print ( x) 26 x <- 300 27 print ( x) 28 } 29 30 f3 () 31 x 32 33 ### Przyklad 4 34 f4 <- function ( x){ 35 print ( x) 36 x <- 700 37 print ( x) 38 } 39 40 f4( x = x) 20

41 x 42 43 ### Przyklad 5 / Uwaga : ta konstrukcja nie jest bezpieczna! 44 f5 <- function (){ 45 x <<- 999 46 } 47 48 x 49 f5 () 50 x 5 Inne konstrukcje iterujące 1 ### Proste porownanie szybkosci 2 liczbaprob <- 10^5 3 dlugoscproby <- 10 4 5 ### Tworzenie przykladowych danych 6 dane <- matrix ( rnorm ( dlugoscproby * liczbaprob ), dlugoscproby, liczbaprob ) 7 8 ### Rozwiazanie 1 9 wyniki1 <- c() 10 system. time ({ 11 for ( k in 1: liczbaprob ){ 12 wyniki1 <- c ( wyniki1, mean ( dane [,k])) 13 } 14 }) 15 16 ### Pierwsze podejscie do programowania funkcyjnego 17 system. time ({ 18 wyniki2 <- apply ( X = dane, MARGIN = 2, FUN = mean ) 19 }) 20 21 identical ( wyniki1, wyniki2 ) 21

6 Przykładowe zastosowania 6.1 Prosta analiza dochodów 1 ### Ewentualna instalacja brakujacych pakietow 2 ### install. packages ( " readxl ") 3 4 ### Wykorzystane biblioteki 5 require ( readxl ) 6 7 ### Ustawianie srodowiska pracy 8 Sys. setlocale ("LC_ CTYPE ", "pl_pl") 9 ### setwd ("H:/ Zadania \ R") 10 11 ### Wczytanie danych 12 plikidane <- dir () 13 dane <- read _ xlsx ( path = plikidane [1], sheet = excel _ sheets ( plikidane [1]) [2] ) 14 dane 15 16 ### Czyszczenie danych 17 18 ### Wyciaganie lat 19 danelata <- unlist ( dane [1,]) 20 danelata <- as. integer ( danelata [3: length ( danelata )]) 21 danelata 22 23 ### Wyciaganie nazw wojewodztw 24 danenazwy <- unlist ( dane [,2]) 25 danenazwy <- as. character ( danenazwy [4: length ( danenazwy )]) 26 names ( danenazwy ) <- NULL 27 danenazwy 28 29 ### Wyciaganie wartosc 30 danedim <- dim ( dane ) 31 danewartosci <- apply ( X = as. matrix ( dane [4: danedim [1], 3: danedim [2]]), 32 MARGIN = c (1,2), 22

33 FUN = as. numeric ) 34 danewartosci <- as. data. frame ( danewartosci ) 35 names ( danewartosci ) <- danelata 36 row. names ( danewartosci ) <- danenazwy 37 danewartosci 38 39 ### Tworzenie wykresow 40 wykresporownanie <- function ( danewartosci, nazwawojewodztwa, skala = " PLN "){ 41 42 ## Wycinanie danch do wykresy 43 danetemp <- danewartosci [ nazwawojewodztwa,] 44 45 ## Na podstawie liczby danych tworzenie roznych kolorow 46 cols <- rainbow ( dim ( danetemp [ 1]) ) 47 48 ## Zmiana skali danych 49 switch ( skala, 50 " MLN PLN " = { danetemp <- danetemp / 10^6} 51 ) 52 53 ## Wyciaganie lat do wykresu 54 danelata = as. integer ( names ( danewartosci )) 55 56 ## Tworzenie pierwszego wykresu 57 plot ( x = danelata, y = danetemp [1,], 58 xlab = " lata ", 59 ylab = skala, 60 main = " Dochody ", 61 type = "o", 62 pch = 20, 63 col = cols [1]) 64 65 ## Jezeli wiecej wojewodztw to dorysowujemy kolejne wykresy 66 if( dim ( danetemp ) [1] > 1 ){ 67 for ( k in 2: dim ( danetemp ) [1] ){ 68 lines ( x = danelata, y = danetemp [ k,], col = cols [ k]) 23

69 points ( x = danelata, y = danetemp [ k,], pch = 20, col = cols 70 } 71 } [k]) 72 73 ## Tworzenie i dodawanie legendy 74 legend ( x = " topleft ", nazwawojewodztwa, col = cols, pch = 20) 75 76 ## Zwracam w sposob niewidoczny tabele z wykorzystanymi danymi 77 invisible ( danetemp ) 78 79 } 80 81 nazwawojewodztwa <- c( " POMORSKIE ", " PODLASKIE ", " OPOLSKIE ") 82 wykresporownanie ( danewartosci, 83 c( " POMORSKIE ", " PODLASKIE ", " OPOLSKIE "), 84 skala = " PLN ") 85 wykresporownanie ( danewartosci, 86 c( " POMORSKIE ", " PODLASKIE ", " OPOLSKIE "), 87 skala = " MLN PLN ") 6.2 To samo co poprzednio ale z wykorzystaniem biblioteki 1 ### Wykorzystane biblioteki 2 source ("./ lib.r") 3 4 ### Ustawianie srodowiska pracy 5 Sys. setlocale ("LC_ CTYPE ", "pl_pl") 6 7 ### Wczytanie danych 8 plikidane <- dir () 9 danewartosci <- czytajdane ( nazwapliku = plikidane [1], 10 nazwaarkusza = excel _ sheets ( plikidane [ 1]) [2] ) 11 12 13 ### Tworzenie wykresow 14 24

15 wykresporownanie ( danewartosci, 16 c( " POMORSKIE ", " PODLASKIE ", " OPOLSKIE "), 17 skala = " PLN ") 18 19 wykresporownanie ( danewartosci, 20 c( " POMORSKIE ", " PODLASKIE ", " OPOLSKIE "), 21 skala = " MLN PLN ") 6.3 Tworzenie prostych map W następnym przykładzie wykorzystamy stworzoną powyżej bibliotekę oraz plik z mapą województw pochodzący ze strony https://gis-support.pl/baza-wiedzy/ dane-do-pobrania/. 1 ### Wykorzystane biblioteki 2 source ("./ lib.r") 3 4 ### Wykorzystane biblioteki zewnetrzne 5 ### install. packages (" rgdal ") 6 require ( rgdal ) 7 require ( maptools ) 8 9 ### Ustawianie srodowiska pracy 10 Sys. setlocale ("LC_ CTYPE ", "pl_pl") 11 12 ### Wczytanie danych 13 plikidane <- dir () 14 danewartosci <- czytajdane ( nazwapliku = plikidane [1], 15 nazwaarkusza = excel _ sheets ( plikidane [ 1]) [2] ) 16 17 ### Wczytanie mapy 18 shape <- readogr ( dsn = "./ mapy / wojewodztwa ", layer = " w o j e w d z t w a ") 19 20 ### Interesujace pola w wczytanym obiekcie 21 shape@ proj4string # rodzaj rzutu 25

22 shape@ data # ramka danych zawierajaca potenclanie dane dotyczace elementow przestrzenych 23 24 ### Niestety tutaj kodowanie polskich znakow nie jest poprawne, chcemy 25 ### jest poprawic taka a by mozna bylo je wykorzystac, niestety 26 ### rowniez kolejnosc nie jest identyczna z tym co jest w pliku XLSX 27 cbind ( as. character ( shape@data [," jpt _ nazwa _"]), 28 row. names ( danewartosci ) 29 ) 30 31 ### Poniewaz robimy to jeden raz wiec zrobimy reindeksowanie recznie, 32 ### dla wiekszej liczby jednostek trzeba sie zastanowic jak zrobic to 33 ### automatycznie. 34 35 ind <- c( 8, 13, 2, 7, 11, 12, 14, 16, 1, 15, 5, 10, 6, 4, 9, 3) 36 cbind ( as. character ( shape@data [," jpt _ nazwa _"]), 37 row. names ( danewartosci )[ ind ] 38 ) 39 40 ### Chcemy na mapie zaznaczyc te wojewodztwa, ktore maja dochody powyzej mediany i te, ktore maja ponizej mediany 41 42 ### Tworzenie i selekcja danych 43 danewartosciind <- danewartosci [ ind,] # zmiana kolejnosci wojewodztw na zgodna z mapa 44 mediana <- quantile ( danewartosciind [," 2016 "],.5) 45 selektor <- danewartosciind [," 2016 "] > mediana 46 47 48 ### Rysowanie mapy 49 plot ( shape, col = " lightgray ") 50 plot ( shape [ selektor,], col = " red ", add = TRUE ) 26