Podstawy programowania w R / Zajęcia 3

Table of Contents

1 Bloki kodu

Blok kodu oznacza się przez nawiasy {}.

### Przyklad wykorzystaniu bloku kodu
data( cars)
ls() # listowanie wszystkich obiektow
head( cars)
plot( cars)
abline( v = mean( cars$speed))
abline( h = mean( cars$dist))

### Wykorzystanie bloku
with( cars,
    { plot( cars, pch = 20, col = "red")
    abline( v = mean( speed), col = "blue")
    abline( h = mean( dist), col = "blue") }
     )

2 Wykonania warunkowe

Podstawowa konstrukcja wykonania warunkowego jest postaci if(warunek){} else {}.

### Prosty przyklad
x <- 2
if( x > 0 ) {
    print( "Zmienna x jest dodatnia.")
}

x <- -1
if( x > 0 ) {
    print( "Zmienna x jest dodatnia.")
}

### Przyklad nieco bardziej skomplikowany
x <- -1
if( x > 0 ){
    print( "Zmienna x jest dodatnia")
} else {
    print( "Zmienna x nie jest dodatnia")
}

3 Iterowanie / Powtarzanie czynności

3.1 Podejście proceduralne

Podstawowa pętla for jest postaci for(k in X){}.

### Podstawowy przyklad
for( k in  1:10){
    print( k^2)
}

3.2 Podejście funkcyjne / wektoryzacja

Podejście fukcyjne polega na zastosowaniu funkcji do całości wektora. To podejście w R jest zazwyczaj znacznie szybsze niż podejście wykorzystujące pętle.

### Ten sam przyklad
(1:10)^2

4 Przykład zastosowania

4.1 Tworzenie wielu plików z danymi

Poniższy przykład tworzy katalog w katalogu roboczym, i w tym nowy katalogu tworzy 100 plików z przykładowymi danymi.

### Weryfikacja katalogu roboczego
getwd()

### Tworzenie nowego katalogu
dataDirName <- "dane"
if( !dir.exists( dataDirName)){
    dir.create( path = dataDirName)
}

### Przechodzenie do nowego katalogu
wd <- setwd( dataDirName)

### Tworzenie przykladowy plikow
n <- 100
fn <- "dane_"
for (alamakota in 1:n){
    temp <- data.frame( "values" = rnorm( 10))
    write.csv( file = paste0( fn, as.character(alamakota), ".csv"), temp)
}

### Powracanie do poczatkowego katalogu roboczego
setwd( wd)

4.2 Wczytywanie wielu plików z danymi

Przykład modelujący sytuację, w kórej dane przychodzą w wielu plikach.

### Przejscie do katalogu zawierajacego dane
dataDir <- "./dane"
wd <- setwd( dataDir)

### Wczytanie wszystkich plikow
fs <- list.files(pattern = ".csv")
data <- c()
for( f in fs){
    data <- c( data, read.csv( file = f)$values)
}

### Powrot to poczatkowego katalogu
setwd(wd)

### Tworzenie raportu
png( file = "fig1.png")
hist( data, "Scott", freq = FALSE, col = "red",
     density = 20)
dev.off()

5 Wprowadzenie do funkcji

Funkcje służą do strukturalizacji kodu, tak aby ten sam fragment kodu można było wielokrotnie wykonywać. Podstawowa konstrukcja definiująca funkcję to f <- function(){}.

### Prosty przyklad
f1 <- function(){
    print( "hello!")
}

### Przykladowe wywolanie
f1()
for( k in 1:10){
    f1()
}

### Bardziej skomplikowany przyklad
f2 <- function( k){
    for( j in 1:k){
        print( "hello!")
    }
}

f2(5)
f2(10)

f3 <- function( a, b){
    a + b
}

x <- f3( 2, 3)
x

Funkcje, które przyjmują wartości domyślne.

f4 <- function( a, b = 0){
    a + b
}

f4( 2, 4)
f4( 2)
f4( a = 2, b = 4)
f4( b = 4, a = 3)

Date: [2017-10-27 Fri]

Author: Michal Ramsza

Created: 2017-11-20 Mon 17:31

Emacs 25.1.1 (Org mode 8.2.10)

Validate