3  Függvények

A függvényekről

data(birthwt, package = "MASS")

3.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 quantile.default(): 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% 
2387.96 
quantile( birthwt$bwt, c( 0.23, 0.5, 0.6 ) )
    23%     50%     60% 
2387.96 2977.00 3169.40 

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 ) ) ) )
              [,1] [,2]
low   3.121693e-01    0
age   2.323810e+01   23
lwt   1.298148e+02  121
race  1.846561e+00    1
smoke 3.915344e-01    0
ptl   1.957672e-01    0
ht    6.349206e-02    0
ui    1.481481e-01    0
ftv   7.936508e-01    0
bwt   2.944587e+03 2977

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

Ilyet is lehet.