Az R egy dinamikusan típusos nyelv, ezért általában nem szükséges megadni egy változó típusát. Az alapértelmezett típus a numeric, amelyet általában kétszeres pontosságú lebegőpontos számként valósítanak meg. Ha 32 bites egész számokat szeretnél használni, használj L utótagot (a Long rövidítése).
Egy objektum „típusának” lekérdezése (történelmi okokból) esetleg zavaró lehet.
A typeof() és a class() függvények hasonlóak, de némileg eltérő eredményt adhatnak vissza:
typeof(50)
#> [1] "double" # more specific: an implementation detail
typeof(50L)
##> [1] "integer"
class(50)
#> [1] "numeric" # less specific: ignores implementation details
class(50L)
#> [1] "integer"
Találkozhatsz a mode()-ra való hivatkozásokkal is. A mode() hasonló a typeof()-hoz.
Kérlek, hagyd figyelmen kívül a mode()-ot és a storage.mode()-ot.
Ezeket csak a visszafelé kompatibilitás miatt biztosítják.
Az előnyben részesített értékadó operátor a <-.
Ha RStudio-ban dolgozol, a Alt-minus gyorsbillentyűvel írhatod be.
x <- 42
avogadro <- 6.02e23
mystr <- "Hello, World!"
Ha =-t használsz a <- helyett, az gyakran, de nem mindig működik, és rossz stílusnak számít.
Az operátorok nagyrészt hasonlóak sok más nyelvhez, bár a %% és a %/% szokatlanabbak.
Ez a % szintaxis a makróként megvalósított infix operátorok meghívásának egy módja.
2 + 3 # 5
2 - 3 # -1
2 * 3 # 6
2 / 3 # 0.6666667
8 %/% 3 # 2 (integer division)
8 %% 3 # 2 (remainder)
2 ^ 3 # 8 (exponential)
Az R-ben a # egysoros megjegyzést indít.
A többsoros megjegyzésekhez nincs külön szintaxis.
Függvény definiálása:
squareit <- function(x) {
x * x
}
A függvényeknek nulla vagy több argumentuma lehet, vesszővel elválasztva.
A function() használatakor zárójelek () kellenek, akkor is, ha nincsenek paraméterek.
A függvényargumentumokhoz megadhatók alapértelmezett értékek, de ezeknek az alapértelmezés nélküli argumentumok után kell következniük, és az alapértelmezett érték hozzárendeléséhez =-t kell használni, nem <--t.
Egy meglehetősen értelmetlen példa:
squareit <- function(x = 42) {
x * x
}
squareit()
#> [1] 1764
A kapcsos zárójelek { } nem szigorúan kötelezőek egysoros függvénytörzseknél, de ezek használata jó stílusnak számít.
Az R automatikusan visszaadja a függvény végső értékét, mint a fenti példákban.
A return() a függvénytörzs bármely pontján használható, hogy egy visszatérési értéket explicit módon megadjunk.
Azonnal visszaadja a megadott értéket, és leállítja a függvényt anélkül, hogy végrehajtaná a függvénytörzs többi kifejezését.
A return() explicit hívása általában csak akkor szükséges, ha valaki valamilyen okból korán szeretne kilépni a függvényből, és egy konkrét értéket szeretne visszaadni.
Erre példa lehet egy if-else elágazás.
Néhány fejlesztő azonban a kódstílus részeként az explicit visszatéréseket részesíti előnyben.
Egy függvény hívása ugyanaz, mint sok más nyelvben:
squareit(3)
#> [1] 9
A későbbi fogalmakban látni fogjuk, hogy a 9 eredmény valójában egy 1 hosszúságú vektor, nem pedig egy skalár szám.
Ezért szerepel a [1], ami azt jelzi, hogy ez a vektor eleje.
is.vector(9)
#> [1] TRUE
Az R-ben a legtöbb dolog valamilyen vektor!
Az R konzol a fenti példát így jelenítené meg:
> squareit(3)
[1] 9
A tanterv dokumentumai nagyrészt azt a konvenciót követik, amelyet több R-tankönyv is használ: elhagyják a promptot, és megjegyzésként írják az eredményt. Így könnyebb a kódpéldákat a konzolba másolni és futtatni.