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

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 i break

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 packages
  • dplyr package

13.2 Grafika

13.3 Import i eksport danych

  • text based formats (read.csv, write.table)
  • XLSX format (openxlsx package)
  • bazy danych (sqlite, DBI, rsqlite)

Date: 2021-03-13 Sat 00:00

Author: Michał Ramsza

Created: 2021-03-24 Wed 17:34

Validate