4 . fejezet Függvények

A függvényekről

4.1 Függvényhívások

Függvény úgy hívható, hogy megadjuk a nevét, majd utána zárójelben az argumentumát, vagy argumentumait (lehet, hogy egy sincs, de a zárójelet ekkor is ki kell írni):

quantile(birthwt$bwt)
##   0%  25%  50%  75% 100% 
##  709 2414 2977 3487 4990

Függvényről súgó a kérdőjellel kapható (két kérdőjel az összes ismert függvényt végigkeresi, akár névtöredékre is): ?quantile.

Aminél egyenlőségjellel adva van érték a specifikációban, ott az default-ként viselkedik, nem kötelező megadni, viszont a default-tal nem rendelkezőket muszáj:

quantile()
## Error in is.factor(x): argument "x" is missing, with no default

Ha több argumentumot adunk meg, akkor azok a felsorolás sorrendjében osztódnak ki:

quantile(birthwt$bwt, 0.23)
##  23% 
## 2388
quantile(birthwt$bwt, c(0.23, 0.5, 0.6))
##  23%  50%  60% 
## 2388 2977 3169

Argumentumra hivatkozhatunk névvel is, ez esetben nem kell a felsorolás sorrendjével törődnünk:

quantile(birthwt$bwt, c(0.23, 0.5, 0.6), type = 6)
##  23%  50%  60% 
## 2381 2977 3175
quantile(probs = c(0.23, 0.5, 0.6), type = 6, x = birthwt$bwt)
##  23%  50%  60% 
## 2381 2977 3175

Az általános gyakorlat az, hogy az első két-három argumentumot adhatjuk meg név nélkül (ezeknél elvárható, hogy fejből is tudja az ember, hogy mit jelent), de a többinél elegánsabb, ha mindenképp adunk nevet (tehát akkor is, ha sorrendben írjuk).

Egy függvény hívásánál az argumentumai elkülöníthetőek egy listába, majd ugyanaz a hatása a do.call használatával elérhető (első argumentum a függvény, második az átadandó argumentumok listája):

quantile(probs = c(0.23, 0.5, 0.6), type = 6, x = birthwt$bwt)
##  23%  50%  60% 
## 2381 2977 3175
do.call(quantile, list(probs = c(0.23, 0.5, 0.6), type = 6, x = birthwt$bwt))
##  23%  50%  60% 
## 2381 2977 3175

Ez akkor jön jól, ha nem tudjuk előre, hogy mik az argumentumok (akár azt sem, hogy hány darab van belőlük!), pl. mert egy lapply-jal gyártottuk le, lásd később:

rbind(c(1, 2), c(3, 4), c(5, 6))
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
## [3,]    5    6
do.call(rbind, lapply(birthwt, function(x) c(mean(x), median(x))))
## Warning in mean.default(x): argument is not numeric or logical: returning NA
##       [,1]                 [,2]  
## low   "0.312169312169312"  "0"   
## age   "23.2380952380952"   "23"  
## lwt   "129.814814814815"   "121" 
## race  "1.84656084656085"   "1"   
## smoke "0.391534391534392"  "0"   
## ptl   "0.195767195767196"  "0"   
## ht    "0.0634920634920635" "0"   
## ui    "0.148148148148148"  "0"   
## ftv   "0.793650793650794"  "0"   
## bwt   "2944.5873015873"    "2977"
## nev   NA                   "a"

4.2 Saját függény definiálása

Ilyet is lehet.