Funktsioonid
Nagu eelnevalt nägime on R-is funktsiooni rakendamise üldkuju funktsiooninimi(sisendväärtus1, sisendväärtus2, ...), ent see vajab mõningat täpsustamist. Vaatame siinkohal näitena funktsiooni seq, mis võimaldab tekitada arvujadasid. Käsuga
> help("seq")
avatav funktsiooni kohta käiv abifail näitab, et funktsioonil on viis argumenti (ehk saame anda viis sisendit): from, to, by, length.out, along.with. Neist esimesel kolmel on olemas ka "sisukas" vaikeväärtus (s.o. kui meie sellele argumendile väärtust ei anna, siis kasutatakse vaikeväärtust). Argumentide from ja to vaikeväärtus on arv 1, argumendi by vaikeväärtus aga tuletatakse teiste argumentide väärtustest.
Mida need argumendid siis reguleerivad? Argument from paneb paika jada esimese elemendi ja to viimase. Argument by illustreerib jada järgmise elemendi saamise eeskirja (tegu on aritmeetilise jadaga) ehk näitab kui mitme ühiku võrra erineb iga järgnev jada liige eelmisest. Argument length.out fikseerib soovitava jada pikkuse ja along.with teeb sisuliselt seda sama, ent kasutab selleks sisendina antud objekti pikkust, mitte väärtust.
Nagu eelnevast on aru saada antud funktsiooni argumendid mõneti dubleerivad üksteist. Tüüpiliselt kolme argumendi määramisest piisab, et oleks selge, millist jada me soovime.
Niisiis, käsk
> seq(from=5,to=1,by=-2)
[1] 5 3 1
on samaväärne käsuga
seq(to=1,by=-2,length.out=3)
[1] 5 3 1
sest esimesel juhul soovime jada, mis algaks arvust viis, lõpeks arvuga üks ja iga liige oleks eelmisest kahe võrra väiksem, teisel juhul aga soovime, jada, milles oleks kolm liiget, mis lõpeks arvuga üks ning, mille iga liige oleks eelmisest kahe võrra väiksem (ilmselgelt peab see olema täpselt seesama jada nagu esimesel juhul).
Kui infot on liialt annab R veateate (isegi kui argumentidele antud väärtused ei ole vastuolulised)
> seq(from=5,to=1,by=-2,length.out=3)
Error in seq.default(from = 5, to = 1, by = -2, length.out = 3) :
too many arguments
Siinkohal tuleb mainida argumentide andmise järjekorda. Kui käsu andmisel toome ära ka argumentide nimed, siis ei oma nendele väärtuste andmise järjekord tähtsust. Seega käsk
seq(to=1,from=5,by=-2)
[1] 5 3 1
annab ikka sama tulemuse. Meil on aga võimalus ka argumentide nimed üldse (või osaliselt) ära jätta. Ja nii saame käsuga
seq(5,1,-2)
[1] 5 3 1
taas sama tulemuse. Siin on küsimus argumentide järjekorras. Meenutame, et esimene argument oli from, teine to ja kolmas by. R on need nüüd ise väärtustega vastavusse seadnud.
Kokkuvõttes, kui argumendi nimi on käsus ära toodud, siis antakse vastav väärtus just selle nimega argumendile, kui aga argumendi nime ära toodud ei ole siis üritab R antud väärtuse omistada järjekorras vastaval kohal olevale argumendile.
Lõpuks märgime veel, et mitte päris kõik R-i funktsioonid ei talita argumendi nimeta antud väärtuste korral nii (see on aga kirjas vastava funktsiooni abifailis). Tegelikult on funktsioon seq ka üks eranditest. Viimane näide küll töötas nii nagu oodatud, ent näiteks käsk
> seq(3)
[1] 1 2 3
tõestab, et antud juhul ei kasutata arvu kolm sugugi mitte argumendi from väärtustamisel (nagu eeldada võiks). Selline funktsiooni seq erandlik käitumine tuleneb funktsiooni autorite eeldusest, et selline funktsiooni väljakutse võiks pigem tekitada ühest algava järjestikuste täisarvude kui vastavast arvust algava järjestikuste täisarvude jada, mille viimane väärtus on üks (argumendi to vaikeväärtus).