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.