Funkcije

User-written funkcije

Konverzija farenheit i celsius

celsius <- c(0:4*10)
farenheit <- 9/5*celsius+32
conversion <- data.frame(Celsius=celsius, Farenheit = farenheit)
print (conversion)
##   Celsius Farenheit
## 1       0        32
## 2      10        50
## 3      20        68
## 4      30        86
## 5      40       104

Stopa rasta unutar x varijable

myReturn<-function(x) c(NA, diff(x)/x[-length(x)]) #ova funkcija je dobra jer racuna stopu rasta unutar jedne varijable.
myReturn (conversion$Celsius) #Ovdje primjenjujemo funkciju koju smo napisali, zamislimo da svaka obzervacija predstavlja temp. u celsiusima odredjenog dana. 
## [1]        NA       Inf 1.0000000 0.5000000 0.3333333

Stopa rasta izmedju x i y varijable:

growthrate <- function (x,y) {(y-x)/x} 
growthrate (conversion$Celsius,conversion$Farenheit) #zamislimo da nas interesuje odnos izmedju celsiusa i farenheita
## [1]      Inf 4.000000 2.400000 1.866667 1.600000

Dobra stvar kod funkcija je sto mozete da ih sacuvate. Dakle one koje su vama potrebne spasite i onda mozete da ih pozovete kad zelite kad radite neku analizu. To vam svakako savjetujem. Sami sa sobomo vidite sta najcesce koristite napisite tu funkciju ako vec nema u R-u i koristite je.

Loop funkcije

Najpoznatije loop funkcije su iz *apply porodice. To su: 1. lapply
3. sapply
3. tapply
4. vapply

Zajednicko kod apply funkcija je taj da ce da PODIJELI neke podatke u manje dijelove, da primjeni neku funkciju na svaki dio, i onda komparira rezultate. Na engleskom to je: split, apply i combine.

Vise o tome mozete procitati : “The Split-Apply-Combine Strategy for Data Analysis” by H.wickham.

Lapply
Ova funkcija uzima listu kao input i aplicira je na svaki element liste i onda vrati listu jednake duzine kao orginal.
Lapply = L znaci lista

Npr.

titanic <- as.data.frame(Titanic)
tit_list <- lapply (titanic, class)
tit_list
## $Class
## [1] "factor"
## 
## $Sex
## [1] "factor"
## 
## $Age
## [1] "factor"
## 
## $Survived
## [1] "factor"
## 
## $Freq
## [1] "numeric"

Na ovaj nacin smo aplicirali class () funkciju na cijleli data frame. tj. na sve varijable.

Posto je tit_list ima klasu liste, a ova klasa je najpogodnija za cuvanje vise klasa podataka i ima raylicite duzine. U ovom slucaju posto je jednakaka duzina listu mozemo sacuvati kao karakter.

tit_karak <- as.character(tit_list)
tit_karak
## [1] "factor"  "factor"  "factor"  "factor"  "numeric"

Primjer2. (Intermediate dio)

kardio <- read.csv2("~/alma master/amra0705.csv")

Recimo da zelimo da uradimo wilcox.test u jednom kodu za vise varijabli.

x<-lapply (kardio[,c("IVSd", "LA", "AV")], function (x) wilcox.test (x~kardio$seropoz.neg))
x
## $IVSd
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  x by kardio$seropoz.neg
## W = 444, p-value = 0.3071
## alternative hypothesis: true location shift is not equal to 0
## 
## 
## $LA
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  x by kardio$seropoz.neg
## W = 558.5, p-value = 0.4264
## alternative hypothesis: true location shift is not equal to 0
## 
## 
## $AV
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  x by kardio$seropoz.neg
## W = 142, p-value = 0.6982
## alternative hypothesis: true location shift is not equal to 0

Sapply
s stoji za simplify.
Primjenjuje se kao lapply.

tit_vect <- sapply (titanic, class)
tit_vect
##     Class       Sex       Age  Survived      Freq 
##  "factor"  "factor"  "factor"  "factor" "numeric"
tit_levels <- sapply (titanic$Class, levels)
tit_levels
##      [,1]   [,2]   [,3]   [,4]   [,5]   [,6]   [,7]   [,8]   [,9]   [,10] 
## [1,] "1st"  "1st"  "1st"  "1st"  "1st"  "1st"  "1st"  "1st"  "1st"  "1st" 
## [2,] "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd" 
## [3,] "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd" 
## [4,] "Crew" "Crew" "Crew" "Crew" "Crew" "Crew" "Crew" "Crew" "Crew" "Crew"
##      [,11]  [,12]  [,13]  [,14]  [,15]  [,16]  [,17]  [,18]  [,19]  [,20] 
## [1,] "1st"  "1st"  "1st"  "1st"  "1st"  "1st"  "1st"  "1st"  "1st"  "1st" 
## [2,] "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd" 
## [3,] "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd" 
## [4,] "Crew" "Crew" "Crew" "Crew" "Crew" "Crew" "Crew" "Crew" "Crew" "Crew"
##      [,21]  [,22]  [,23]  [,24]  [,25]  [,26]  [,27]  [,28]  [,29]  [,30] 
## [1,] "1st"  "1st"  "1st"  "1st"  "1st"  "1st"  "1st"  "1st"  "1st"  "1st" 
## [2,] "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd"  "2nd" 
## [3,] "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd"  "3rd" 
## [4,] "Crew" "Crew" "Crew" "Crew" "Crew" "Crew" "Crew" "Crew" "Crew" "Crew"
##      [,31]  [,32] 
## [1,] "1st"  "1st" 
## [2,] "2nd"  "2nd" 
## [3,] "3rd"  "3rd" 
## [4,] "Crew" "Crew"

Vapply
Omogucava da specificiramo koji format zelimo. tj. kad je funkcija sapply onda je output kako r odluci. Ako je vapply onda mi odlucujemo. Ako smo pogresno odlucili onda dobijemo error. Npr. kad je kod sapply(titanic, class) dobijemo clasu za svaku varijablu.A kad je kod: vapply (titanic, class, character(1)) onda je output vektor duzine jedan.

vapply (titanic, class, character(1))
##     Class       Sex       Age  Survived      Freq 
##  "factor"  "factor"  "factor"  "factor" "numeric"

Tapply
Tapply aplicira funkciju na x varijablu za svaku y varijablu.

Primjer: ako zelimo da saznamo medju onima koji nisu prezivjeli koliko ih je bilo iz koje klase. Prvo formirajmo dataframe.

library (dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
no.surv<-filter(titanic, Survived=="No")

pa onda

tapply (no.surv$Freq,no.surv$Class,  summary)
## $`1st`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0     0.0     2.0    30.5    32.5   118.0 
## 
## $`2nd`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00    0.00    6.50   41.75   48.25  154.00 
## 
## $`3rd`
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    17.0    30.5    62.0   132.0   163.5   387.0 
## 
## $Crew
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     0.0     0.0     1.5   168.2   169.8   670.0

$Freq je numericka varijabla, $Class je faktor.

Rezultat nam pokazuje da je broj poginulih na titaniku povezan i sa klasama u kojima su bili ptunici. Medju osobljem i trecom klasom ima najvise poginulih.