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)