Podstawy programowania w R / Grupa 2
Table of Contents
1 Informacje techniczne
- lab dla osób, które nie miały styczności z R i/lub programowaniem
- strona: michal.ramsza.org
- zaliczenie
- konsultacje
2 Podstawowe informacje
- Instalacja www.r-project.org
- Edytory
- R app dla Win i Mac
- RStudio rstudio.com
- VS Code code.visualstudio.com
- Emacs + ESS
- Terminal (konsola), np. Radian
3 Pierwszy skrypt w R
### Pierwszy skrypt ### Tworzenie przykładowej próby x <- rnorm( 10^3) ### Tworzenie histogramu hist(x, probability = TRUE, xlim = c( -5, 5), ylim = c( 0, 0.5), main = "Mój pierwszy histogram", xlab = "wartości", ylab = "gęstość", density = 20, col = "black") ### Rysowanie gęstości lines( density(x, adjust = 1.5), col = "blue", lwd = 4) ### Siatka grid()
4 Podstawowy workflow dla prostej analizy danych
- Zapisywanie i wczytywanie danych liczbowych
- Zapisywanie obrazów
### Tworzenie danych x <- data.frame( id = 1:1000, value = rnorm( 1000)) ### Zapisywanie danych liczbowych (CSV) write.csv( x, file = "./dane_00.csv", row.names = FALSE) ### Wczytywanie danych liczbowych y <- read.csv( file = "./dane_00.csv", header = TRUE) head( y) y$value ### Tworzenie histogramu hist( y$value, probability = TRUE, xlim = c( -5, 5), ylim = c( 0, 0.5), main = "Mój pierwszy histogram", xlab = "wartości", ylab = "gęstość", density = 20, col = "black") ### Rysowanie gęstości lines( density( y$value, adjust = 1.5), col = "blue", lwd = 4) ### Siatka grid() ### Zapisywanie do pliku dev.copy( device = png, "./rys_00.png") dev.off()
5 Podstawowe typy bazowe w R
x <- 2 x x <- "test" x ### Logiczne typeof( TRUE) typeof( FALSE) ### Integers typeof( 2L) typeof( 1:3) ### Double typeof( 2) typeof( pi) ### Complex typeof( 2 + 3i) sqrt( -1 + 0i) ### Characters typeof( "ala ma kota") ### List typeof( list( 1, 2)) ### Closure typeof( data.frame) ### Environment typeof( globalenv()) ### Language typeof( quote( x <- 2)) ### S4 typeof( setClass( "test", slots = list( "value" = "numeric"))( value = 5))
6 Wektory
6.1 Tworzenie wektorów
2 ( 4, 7, 2)
6.2 Generowanie wektorów
### Operator : 1:5 1.1:5 5:1 5:-5 -5:5 2 * 2:5 (2 * 2):5 1:10 / 2 1:4^2 ### Funkcja seq seq( from = 0, to = 1, by = 0.13) seq( from = 0, to = 1, length.out = 17) seq( from = 0, to = 1, along.with = 1:17) ### Fukcje rep rep( 1:2, 5) rep( seq( from = 0, to = 1, by = 0.1), 10)
6.3 Operacje na wektorach
- Operacje matematyczne na wektorach
- Operacje algebraiczne i podobne na wektorach
- Funkcje podające strukturę wektora (agreagty)
- Recycling rule
### Operacje matematyczne x <- 1:10 sin( x) cos( x) sqrt( x) exp( x) x^2 ### Operacje algebraiczne i podobne na wektorach x 2 * x x/2 x + x 2 * x + 4 * x ### Funkcje podające strukturę wektora (agreagty) length( x) max( x) min( x) mean( x) sd( x) range( x) str( x) structure( x) object.size( x) ### Recycling rule x <- 4:1 y <- 1:2 x y x + y ## 4 3 2 1 ## 1 2 1 2 ## 5 5 3 3 z <- 1:3 x + z x + 1 1 + x
6.4 Co może przechowywać wektor?
x <- 1:5 typeof( x) x <- c( 1, 3, 6) typeof( x) x <- c( "ala", "ma", "kota") typeof( x) x <- c( c( 1, 2), c( 3, 4)) x x <- c( sin, cos) typeof( x) x <- c( list( 1), list( 2)) typeof( x) x <- c( 1, NA, 2) typeof( x) sqrt( x) sqrt( c( 1, -1, 4)) sin( sqrt( c( 1, -1, 4))) x <- c( 0, -Inf, 1 ) typeof( x) exp( x) 1/0 mean( x) sd( x) c( TRUE, FALSE) c( TRUE, FALSE, 3L) c( TRUE, FALSE, 3L, 3.456) c( TRUE, FALSE, 3L, 3.456, 1 + 4i) c( TRUE, FALSE, 3L, 3.456, 1 + 4i, "ala") 2 == 2 2 == 2L 2 == "2" identical( 2, 2L)
6.5 Indeksowanie wektorów
- Indeksowanie przez podanie pozycji
- Indeksowanie przez wektory logiczne
- Indeksowanie przez podanie nazwy
### Indeksowanie przez podanie pozycji x <- sample( 1:10) x x[1] x[7] x[c(1, 7)] x[c( 1, 1, 10, 10, 5)] x[1:5] x[5:10] x[5:1] x[1 + rbinom( n = 30, size = 9, prob = .5)] ### Indeksowanie przez wektory logiczne ## 3 6 8 2 ## T F F T ## 3 2 x[ c( T, F, T, T, T, F, F, T, F, T)] x[x > 5] y <- rnorm( 100) y mean( y[y > 0]) mean( y[!(y > 0)]) mean( y[y < 0]) x z <- sample( x = letters[1:2], size = 10, replace = TRUE) z mean( x[z == "a"]) mean( x[z == "b"]) ### Przykład dla funkcji f(x) = (x - 1) * (x + 1) x <- seq( -2, 2, length.out = 500) y <- (x - 1) * (x + 1) ind <- y < 0 ind2 <- x < 0 plot( x, y, col = "white") abline( h = 0) lines( x[ind], y[ind], col = "red") lines( x[!ind & ind2], y[!ind & ind2], col = "blue") lines( x[!ind & !ind2], y[!ind & !ind2], col = "blue") ### Indeksowanie przez podanie nazwy x <- 3:1 x names( x) names( x) <- LETTERS[1:3] names( x) x x["A"] x[c( "A", "C")]
6.6 NEXT Macierze
- Tworzenie macierzy
- Operacje na macierzach
### Tworzenie macierzy matrix( 1:(2 *3), 2, 3) matrix( 1:(2 *3), 2, 3, byrow = TRUE) array( 1:6, c( 2, 3)) a <- matrix( 1:(2 *3), 2, 3) a attributes( a) b <- 1:6 b attr( b, "dim") <- c( 2, 3) b rbind( 1:4, 4:1) cbind( 1:4, 4:1) ### Operacje na macierzach sin( a) 1 + a a + c( 1, 2) b <- matrix( round( rnorm( 9), 1), 3, 3) b t( b) solve( b) round( solve( b) %*% b, 10) sp <- eigen( b) round( solve( sp$vectors) %*% b %*% sp$vectors, 2) round( sp$values, 2) svd( b) length( b) dim( b) str( b) structure( b) range( b) quantile( b, .5)
6.7 Indeksowanie macierzy
- Indeksowanie przez podanie pozycji (zarówno na wymiarze jak i jako macierzy)
- Indeksowanie przez podanie wektorów logicznych na wymiarach
- Indeksowanie przez podanie etykiety
- Indeksowanie mieszane
rm(list = ls()) a <- cbind( sample( 1:10), round( rnorm( 10), 2), round( rnorm( 10), 2)) a a[1] a[2] a[1:4] a[ 1, 3] a[ c( 1, 3, 6), c( 1, 3)] a[1:5, 2:3] a[1:5, ] a[ , 2:3] a[ , 2] a[ , 2, drop = FALSE] a[a > 0] a[ a[,2] > 0, ] a[ a[,3] > 0, ] a[ a[,3] > 0 & a[,2] > 0, ] a[a[,2] > mean( a[,2]) ,] TODO
7 Listy
7.1 Tworzenie list
7.2 Operacje na listach
- Łączenie list
- Usunięcie elementu list
- Zmiana wartości pola
- Zmiana nazwy klucza
7.3 Indeksowanie list
- Przez podanie klucza
- Przez podanie pozycji z operatorami
[
i[[
- Przez podanie klucza z operatorami
[
i[[
7.4 Ramki danych
- Tworzenie ramki danych
- Ramki danych powstałe z wczytania danych
- Oglądanie ramki danych
7.5 Indeksowanie ramek danych
- Indeksowanie jak listy
- Indeksonowanie jak macierz
- Przykłady mieszanego ideksowanie
8 Bloki kodu
- Blok kodu
- Zastosowanie z
with()
9 Wykonania warunkowe
- Konstrukcja z
if
,if~/~else
- Konstrukcja z
switch
(pozycja bloku oraz etykieta bloku) - Konstrukcja
ifelse()
10 Iterowanie (proceduralne)
- Pętle
for
,while
- Konstrukcje z
next
ibreak
11 Funkcje
- Funkcje bez argumentów
- Funkcje z pojedynczym i wieloma argumentami
- Wartości domyślne arguememntów
- Funkcje z nieustalona liczbą argumentów z
...
- Nietypowe nazwy funkcji i definiowanie funkcji o nietypowych nazwach
- Funkcje czyste (pure functions, lambda functions)
- Operatory binarne
- Funkcje jako argumenty funkcji i wartości zwracane przez funkcje (function factories)
- Wprowadzenie do zakresów zmienności zmiennych
12 Iterowanie (funkcyjne)
- Wykorzystanie
apply()
,lapply()
i podobnych konstrukcji.
13 Tematy dodatkowe
13.1 Manipulowanie danymi
- data frames
tibble
packagesdplyr
package
13.2 Grafika
- standard stack (
par()
,plot()
,lines()
, …) ggplot2
package (https://www.springer.com/gp/book/9783319242750, https://ggplot2-book.org/)
13.3 Import i eksport danych
- text based formats (
read.csv
,write.table
) - XLSX format (
openxlsx
package) - bazy danych (sqlite,
DBI
,rsqlite
)