Az R programozási nyelv

Utasítások, vezérlési szerkezetek

Értékadás

Az értékadás lehetséges formái:

{változó} <- {kifejezés}
{változó} <<- {kifejezés}
{kifejezés} -> {változó}
{kifejezés} ->> {változó}

Az első kettő jobbról-balra, a második kettő pedig balról-jobbra asszociatív. A értékadó kifejezés értéke az adott kifejezés értéke, a többszörös értékadás megengedett. Az <- és -> operátorok esetében az értékadás abban a környezetben történik, amelyben az értékadó kifejezés kiértékelésre kerül. Az <<- és ->> operátorok az adott nevű szimbólumot keresnek abból a környezetből kiindulva, amelyben végrehajtásra került az értékadás, kifelé haladva a befoglaló környezetekben

Szekvencia

{ utasítás1; utasítás2; ... utasításN}
utasítás1
utasítás2
...
utasításN

A szekvenciában az egymást követő utasításokat ';' vagy újsor karakterrel lehet elválasztani. Lehetőségünk van blokkok létrehozásával a '{' és '}' karakterek használatával. A blokk utasítás, mint kifejezés értéke a legutolsó utasítás értékével egyezik meg.

Elágazás

Kétirányú elágazás

if ( kifejezés1 ) kifejezés2 else kifejezés3
if ( kifejezés1 ) kifejezés2

Kifejezés1 logikai vagy numerikus vektor lehet, amelynek első eleme NA értéktől különböző kell hogy legyen. Ezen feltételek nem teljesülése hiba, míg ha kifejezés1 értéke egynél hosszabb vektor, akkor figyelmeztető üzenet, hogy csak az első elem lesz felhasználva.

Végrehajtáskor először kiértékelődik az első kifejezés. Ha kifejezés1 értéke olyan logikai vektor, amelynek első eleme TRUE, vagy pedig olyan numerikus vektor, amelynek első eleme nem 0, akkor kiértékelődik kifejezés2, amelynek értéke az utasítás visszatérési értéke. Egyébként ha van else ág, akkor kiértékelődik kifejezés3, amelynek értéke az utasítás visszatérési értéke. Ha nincs else ág, akkor NULL az utasítás visszatérési értéke.

Ha az utasítás nem blokkban szerepel, akkor az else utasítás egy sorban kell hogy szerepeljen kifejezés2-vel. Az if utasításokat tetszőleges mélységig egymásba lehet ágyazni.

Többirányú elágazás

Az R nyelvben a többirányú elágazást a switch függvény használatával szimulálhatjuk.

switch(kifejezés, arg2, arg3, ... argN)

A kifejezés egyelemű numerikus vagy karakter vektor lehet. Kiértékelődik az első argumentumként adott kifejezés, majd a következő módon folytatódik a végrehajtás.
Ha kifejezés értéke numerikus: amennyiben az egésszé konvertált k érték 1 és n-1 közé esik – ahol n a függvény aktuális argumentumainak száma – , akkor kiértékelődik a (k + 1)-edik aktuális argumentum, ennek értéke lesz a függvény visszatérési értéke. Különben NULL a függvény visszatérési értéke.
Ha kifejezés értéke karakterlánc: ha van olyan argumentum, amelynek a címkéje megegyezik a karakterlánccal, akkor az első ilyen argumentum értéke a visszatérési érték. Ha nincs ilyen argumentum, akkor a visszatérési érték az első címke nélküli argumentum értéke, ennek hiányában NULL.

Példák:
NumberOfDays <- function(year, month) {
switch(month,
31,
if (((year %% 4 == 0) && !(year %% 100 == 0)) || (year %% 400 == 0)) 29 else 28,
31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
}
is.prime <- function(n, algorithm="AKS") {
algorithm <- match.arg(algorithm, c("naive", "Fermat", "MillerRabin", "AKS"))
switch(algorithm,
naive=NaivePrimalityTest(n),
Fermat=FermatPseudoprimeTest(n),
MillerRabin=MillerRabinPseudoprimeTest(n),
AKS=AKSPrimalityTest(n) )
}

Ciklus

Repeat

repeat kifejezés

Végtelen ciklus. Az adott kifejezés kiértékelése addig, amíg egy break utasítás végrehajtásra nem kerül. Az utasítás visszatérési értéke a kifejezés utolsó kiértékelésének eredménye

While

while ( kifejezés1 ) kifejezés2

Végrehajtáskor először kiértékelődik az első kifejezés. Ha kifejezés1 értéke igaz (mint az if esetében), akkor kiértékelődik kifejezés2, ezután újból ki kell értékelni kifejezés1-et, majd hasonlóan folytatni. Ha kifejezés1 hamis, az utasítás végrehajtás befejeződik. Az utasítás visszatérési értéke kifejezés2 utolsó kiértékelésének eredménye, illetve NULL akkor, ha egyetlen egyszer sem lett kiértékelve kifejezés2

For

for ( változó in kifejezés1 ) kifejezés2

A kifejezés1 vektor vagy lista értékű kifejezés lehet. Végrehajtáskor az adott változó sorban felveszi értékül az első kifejezéssel adott vektor vagy lista minden elemét, és minden értékre kiértékelődik kifejezés2. Kifejezés2-ben meg lehet változtatni a változó értékét, de az ettől függetlenül felveszi értékül a vektor vagy lista minden elemét. Az utasítás visszatérési értéke kifejezés2 utolsó kiértékelésének eredménye, illetve NULL akkor, ha egyetlen egyszer sem lett kiértékelve kifejezés2. Az utasítás végrehajtása után mellékhatásként a változó értéke az lesz, amelyet a végrehajtás során utoljára felvett

Break és next utasítások

Mindkét utasítás csak ciklus utasításokban használható. A break utasítás megszakítja a legbelső tartalmazó ciklus utasítás végrehajtását. A next utasítás a ciklus végrehajtásának következő iterációját idézi elő. Mindkét utasítás visszatérési értéke NULL.