R nyelv
Az R egy magas szintű programozási nyelv és környezet, melynek legfontosabb felhasználása az adatelemzés és az ahhoz kapcsolódó grafikus megjelenítés. Az R nyelv egy interpretált szkript nyelv.
Az R programozási nyelv többek között regressziós, klasszifikációs döntés, ... modellek illesztésére, trendelemzésre, hipotézisvizsgálatra és többváltozós statisztikai vizsgálatokra, így faktor- és klaszteranalízisre és egyéb tudományos számítás elvégzésére használható.
Az R rendelkezik grafikus megjelenítő eszközzel, ezáltal eredményeinket számos diagramtípus közül választva ábrázolhatjuk. Az R az évek folyamán nemcsak statisztikai, hanem más vizsgálatokra is alkalmassá vált, például gyökkeresési algoritmusok is elérhetők numerikus integráláshoz.
Én most a Windows alatt telepített R működősével foglalkozom. A telepítését követően az R-t az RGui.exe állománnyal indíthatjuk
"C:\Program Files\Microsoft\R Client\R_SERVER\bin\x64\rgui.exe"
R-ben beépített függvények állnak rendelkezésre a számítások végrehajtására, azonban számos kiegészítő csomag (package) is letölthető, amelyek különböző függvényeket tartalmaznak.
A függvények szintaxisa: függvénynév(paraméter). Például tartalom képernyőre való kiíratása a print függvénnyel történhet, amelynek gömbölyű zárójelekkel határolt argumentumába írhatjuk a megjelenítendő szöveget.
print("Hello, World!")
- Az R-ben a sorok a > prompt karakterrel kezdődnek. Be nem fejezett utasításokra sortörést alkalmazva az új sor + jellel kezdődik > helyett.
- A szintaktikailag teljes utasítások sortöréssel végződnek.
- Az utasítás bevitele az Esc billentyűvel szakítható meg.
- Az R kis- és nagybetű érzékeny, így létrehozhatunk különböző értékű, a és A elnevezésű objektumot.
- A megnyitandó állományok nevében, elérési útjában található ékezetek, szóközök általában nem okoznak problémát, de ezek használata inkább kerülendő.
- Az R-ben a tizedesjel alapértelmezetten pont, nem vessző. (Állomány beolvasásakor ez átállítható, például a read.table függvény használata esetén.)
- A Console felület a Ctrl+l utasítással törölhető.
- A script több sora elé kettőskeresztet a sorok kijelölése után a Ctrl+Shift+c betűkombinációval tehetünk.
- R lezárására használható q() vagy quit() függvény.
- Az utasításainkhoz fűzött magyarázatainkat egy vagy több kettőskereszt (#) karakterrel vezetjük be.
RStudio
Az R programozás megkönnyítésére külön GUI is létezik, program maga az RStudio honlapjáról tölthető le (de ez feltételezi, hogy az R már telepítve van).A RStudio müködésekor munkafolyamat során létrehozott objektumok törlődnek, ha a munkaterületet nem mentjük.
Objektumainkat bináris, RData kiterjesztésű állományba menthetjük a munkavégzés mappájába a save.image("név.Rdata") utasítással.
Beolvasása a load("név.Rdata") utasítással lehetséges. A létrehozott fájl hordozható, vagyis másik gépen szintén megnyitható, ha rendelkezésünkre áll az R.
A Console ablakban a munkafolyamat alatt kiadott utasítások lapozhatók a felfelé és lefelé mutató nyilakkal. A visszahívott parancsok szerkeszthetők is, a sorokban a balra és jobbra mutató nyilakkal pozícionálhatjuk a kurzort. A teljes parancs végrehajtása ENTER-rel történhet, ehhez nem szükséges a sor végére navigálni.
Előző parancssor újbóli előhívása felfelé mutató nyíl gombbal lehetséges.
A parancs név kiegészítése TAB billentyűvel kérhető ekkor rövid segítő leírás is megjelenik.
Az utasítások Rhistory kiterjesztésű szöveges állományban menthetők a savehistory("név.Rhistory") paranccsal.
Betöltése a loadhistory("név.Rhistory") paranccsal történhet.
Kerülendő, hogy a létrehozott objektumainkat a munkavégzés alapértelmezett mappájában található .RData elnevezésű állományba mentsük, ugyanis a RStudio újbóli elindításakor ezek automatikusan betöltésre kerülnek, függetlenül attól, hogy szükségünk van ezekre az új munkafolyamat során vagy sem.
Az RStudio felülete (alapértelmezetten négy részre osztott):
1. A bal alsó, Console ablakban az ENTER-rel jóváhagyott kódok egyesével kerülnek értelmezésre és végrehajtásra az R parancsértelmezője által. Az eredmény szintén ebben az ablakban jelenik meg
2. A bal felső, Script ablakba írnunk utasítások sorozatokat és scriptként mentenünk, hiszen így később is fel tudjuk használni. Az R script bármilyen szövegszerkesztővel írható, amelyből a vágólapra másolhatók az utasítások és beilleszthetők az R script ablakba.
Új script a File/New File/Script menüpontban hozható létre. Mentésére a File/Save menüpontban kerülhet sor. (A mentéskor célszerű UTF-8 kódolást használni.)
3. A jobb felső ablakának Environment fülén láthatók a létrehozott objektumok
Az objektumok törlése az rm függvénnyel lehetséges, argumentumában felsorolva a törlendő objektumokat, vesszővel elválasztva. Az összes létrehozott objektum az rm(list=ls()) paranccsal törölhető. (A törlést tehát két függvény egymásba ágyazásával értük el. A list=ls() paranccsal arra utasítottuk az R-t, hogy az objektumok neveit fűzze össze egy karakterlánc típusú vektorba, majd a törlést az rm függvénnyel hajtottuk végre.)
4. A jobb alsó ablakrésznél a bemeneti és kimeneti erőforrások láthatók a tab fülekre csoportosítva.
R alap utasítások:
Az R-ben létrehozott objektumok lehetnek
egyeleműek
numerikus (numeric),
szöveg (character)
vagy logikai (logical)
vektorértékűek
mátrixok (matrix),
tömbök (array),
adatstruktúrák (data frame),
listák.
Utóbbiak abban különböznek a mátrixoktól és a tömböktől, hogy oszlopaikban eltérő típusú adatok (pl. számok, dátumok és szövegek) is szerepelhetnek.
Számos speciális típusú objektum létezik. Ilyen például a ncdf4 típusú objektum, amely NetCDF fájlokban tárolt többdimenziós tömbök meta adatait tartalmazhatja.
Értékadás nélkül az R megjeleníti egy művelet eredményét, de nem tárolja el azt.
Alapvető matematikai műveletek:
Két szám összege: x+y
Két szám különbsége: x-y
Két szám szorzata: x*y
Két szám hányadosa: x/y
Hatványozás:
Ha x a hatvány alapja és y a kitevője, akkor: x**y vagy x^y
A műveletek () zárójelekkel csoportosíthatók, így a műveleti sorrend megváltoztatható.
A műveleti parancs utáni sorban jelenik meg az eredmény.
A szögletes zárójelekben található [1] szám arra utal, hogy az eredmény sorvektor (ebben az esetben egy komponensű vektor, azaz skalár).
Az eredmény eltárolásához objektumba kell azt mentenünk.
Értékadás az alábbi módokon lehetséges:
objektumnév <- kifejezés
kifejezés -> objektumnév
objektumnév = kifejezés
Egymás után több, azonos nevű objektumot létrehozva, az utóbbi felülírja az előbbit.
Mivel az R kis- és nagybetű érzékeny, ugyanaz a név kis- és nagybetűvel írva különböző objektumokat fog jelölni.
Az objektumok, változók nevében szerepelhet pont, alulvonás és különleges karakter is, utóbbiak használata azonban kerülendő.
Ha a név ponttal kezdődik, akkor a második karakter nem lehet szám.
Névként nem használhatók az alábbi „foglalt” kifejezések, noha egy objektumnév részeként alkalmazhatók:
TRUE, FALSE, NULL, Inf, NaN, NA, NA_integer_, NA_real_, NA_complex_, NA_character_.
A kis- és nagybetű érzékenység miatt kizárólag a teljes egyezés kerülendő az előbb felsorolt szavakkal.
Utasítások blokkok:
Több utasítás megadása esetén az utasítások blokkokba szervezhetők, kapcsos zárójelek használatával.
{x <- 1+2
y <- 2*5
z <- x/y
}
z
[1] 0.3
A { után a > prompt jel + jelre változik. Az utasítások blokkját } fejezi be.
Az utasítások tehát ezt követően hajtódnak végre.
Utasítások blokkokba szervezésére ciklusok esetén lehet szükségünk.
Az objektumok típusának, dimenziójának meghatározása:
Az objektumok típusa és dimenziója (kettő vagy annál több dimenziós objektum esetén) például a class és dim függvényekkel jeleníthető meg.
Szintaxisuk: class(objektumnév) dim(objektumnév)
A maradékos osztás a %% operátorral, az egész osztás a %/% operátorral végezhető el.
Például :
9%%2 azt adja meg, hogyha kilencet osztjuk kettővel, akkor mennyi lesz a maradék,
míg 9%/%2 azt adja meg, hogy hány egész számszor van meg kilencben a kettő.
Vektorok
A vektort egymás melletti cellákban tárolt értékek sorozataként képzelhetjük el, mely értékek mindegyike azonos típusú.
Több érték vagy azonos típusú objektum „összefűzésére” (konkatenációjára) a c függvény használható, amelynek szintaxisa: c(érték1, érték2, érték3,...)
A függvénnyel számokból például numerikus vektorok készíthetők.
Egy objektum, így vektor adott komponense vagy komponensei a [] zárójelek használatával jelölhető ki.
objektum[sorszám]
objektum[c(sorszám_1,sorszám_2)]
objektum[sorszám_1:sorszám_n]
Ha az operátor két oldalán lévő vektorok elemszáma eltér, akkor az általános szabály az, hogy a rövidebbik vektort az R megismétli mindaddig, míg a hosszabbik vektor elemszámát el nem éri. Ha a rövidebbik vektort nem egész számszor megismételve kapjuk a hosszabb vektort, akkor figyelmeztetést kapunk az Rtől, melyben erre a tényre felhívja a figyelmünket, de a kijelölt műveletet az R ennek ellenére végrehajtja.
Faktorok:
A faktor a vektorhoz nagyon hasonló, homogén, egydimenziós adatszerkezet, amelyet elsősorban kategorikus változók értékeinek tárolására használunk. Faktorok esetében csak numerikus és karakteres adattípusokat használhatunk.
Olyan speciális objektumok, amelyek osztályokba sorolják a vektorok komponenseit.
A faktor tehát numerikus kódolású vektort jelent szövegértékű szintekkel. Például varianciaanalízis (analysis of variance, ANOVA) esetén az összehasonlítandó csoportok megkülönböztetendők valamilyen tényező (faktor) alapján.
Ilyen lehet a nem, a kor, az időszak stb. Tegyük fel, hogy januári, februári és márciusi adatokat csoportosítunk. A hónapok nevei karakterláncként állnak rendelkezésünkre a honapok objektumban. Faktor típusú változó az as.factor függvénnyel hozható létre.
Mátrixok, tömbök
Az egydimenziós vektor többdimenziós megfelelője a tömb (array).
A tömb a vektorhoz hasonlóan homogén adatszerkezet, amely az alapvető attribútumokon túl a dim attribútummal is rendelkezik
Egy mátrix vagy tömb lehet többek közt numerikus, karakterlánc, logikai, de egy tömbön belül többféle adattípus nem alkalmazható.
Mátrix létrehozásuk módja:
- matrix(objektum vagy érték, nrow=sorok száma, ncol=oszlopok száma, byrow = FALSE vagy TRUE)
- array(objektum vagy érték, dim=c(dim_1, dim_2, ..., dim_n))
A mátrix alapértelmezetten oszloponként kerül feltöltésre az adatokkal. A matrix függvény byrow=TRUE paraméterével állítható be soronkénti feltöltés.
Többek között mátrixok adatainak térképes ábrázolásakor fontos, hogy tudjuk, milyen rend szerint tölti fel az R a mátrixot adatokkal, hiszen ennek hiányában tévesen pozicionálhatjuk az értékeket.
Mátrix adott sora, oszlopa vagy eleme a [] zárójelekkel jeleníthető meg:
objektum[sorszám,]
objektum[,oszlopszám]
objektum[sorszám,oszlopszám]
Mátrix adott sora vagy oszlop a következőképpen hagyható ki a megjelenítésből:
objektum[-sorszám,]
objektum[,-oszlopszám]
A tömbök indexelése nagyon hasonló a vektorok indexelésére, itt is a szögletes zárójel ([]) operátort kell használnunk a tömb egyes elemeinek elérésére. Az egyetlen különbség, hogy mivel itt a dimenziók száma nagyobb mint egy, az egyes dimenzióknak megfelelően, több indexeket kell megadnunk és ezeket vesszővel választjuk el az indexoperátoron belül
Az egyes dimenziópozíciókban szereplő indexekre ugyanazok a szabályok érvényesek, mint a vektorokra. Használhatunk pozitív vagy negatív numerikus skalárokat és vektorokat, de a karakteres és logikai vektorokkal való indexelés is megengedett.
Vektorok, mátrixok összekapcsolása:
Vektorok mátrixokká fűzhetők össze, illetve vektor mátrixszal, valamint mátrix mátrixszal is összekapcsolható a cbind és az rbind függvényekkel.
Egy mátrix, vagy vektor típusú objektumhoz egy mátrix objektum kijelölt oszlopának kapcsolására példa:
objektum <- cbind(objektum1, objektum2[,oszlopszám])
Egy mátrix vagy vektor típusú objektumhoz Egy mátrix objektum kijelölt sorának kapcsolására példa:
objektum <- rbind(objektum1, objektum2[sorszám,])
Többdimenziós tömbök:
Az array függvénnyel kettőnél több dimenziós tömböket is létrehozhatunk.
Esetenként szükségünk lehet adott dimenziójú, üres tömb létrehozatalára. Ekkor az array függvény argumentumából a tömbbe töltendő adatokat elhagyjuk, azaz, pl. 10x10x10-es üres (NA-val kitöltött) tömb létrehozatalára a következő utasítás adandó ki:
tomb <- array(dim=(c(10,10,10)))
Listák
A lista (list) típusú objektumokban különböző hosszúságú vektorok tárolhatók.A lista adatszerkezetben tehát egymás után többfajta adatot is felsorolhatunk, sem azok típusára, sem azok méretére nincs megszorítás.A lista minden elemével a lapply() vagy az sapply() függvény segítségével hajthatunk végre műveletet
Az lapply() a bemenő lista elemszámával egyező méretű listával tér vissza, melynek értékei a második paraméterben szereplő függvény visszatérési értékei. Az sapply() hasonlóan jár el, de a visszatérési értéke egy vektor.
Adatgenerálás
A seq függvénnyel szabályos sorozatok hozhatók létre:seq(from=sorozat kezdete, to=sorozat vége, by=növekedés/csökkenés mértéke)
A sorozat tagjainak sorrendje a rev függvénnyel is megfordítható.
A rep függvény egy sorozat valahányszor történő ismétlésére alkalmazható: rep(ismétlendő sorozat, times vagy each=ismétlődés száma)
Az each paraméterrel minden egyes elem egymás után is megismételhető. Például ismételjük meg a sor4 objektum minden elemét egymást követően kétszer!
rep(sor4, each=2) [1] 1 1 2 2 3 3 4 4 5 5 1 1 2 2 3 3 4 4 5 5
Az R-ben létrehozhatók adott valószínűségi eloszlású véletlenszám-sorozatok is.
Geometriai eloszlású, 100 tagú számsorozat képzése, p= 0,5 valószínűséggel:
rgeom(100, p=1/2)
Poisson-eloszlású, 100 tagú számsorozat képzése, 𝜆 = 5 paraméterrel:
rpois(100, lambda=5)
Normális eloszlású, 200 tagú számsorozat képzése, amelynek az átlaga 2 és a szórása 1:
rnorm(200, mean=2, sd=1)
Megjegyzés: ha nem adunk meg értékeket a mean és az sd paramétereknél, vagyis az rnorm(200) utasítást adjuk ki, akkor az R alapértelmezetten standard normális eloszlásból származó adatsort generál, azaz olyan adatsort, amelynek várható értéke 1, a szórása pedig 0.
Egyenletes eloszlású, 200 tagú számsorozat képzése, a [0,1] zárt intervallumon:
runif(200, min=0, max=1)
A véletlen számsorozat reprodukálhatóságára az előző utasításokat megelőzően a set.seed(azonosítószám) parancs adandó ki.
Például a következő két utasítást adjuk ki háromszor!
set.seed(1) runif(200, min=0, max=1)
R -es File művelet:
Íratás fájlba, hogy „Hello, világ!”, egy sorban!
cat("Hello", file="proba.txt")
cat(" világ!", file="proba.txt", append=TRUE)
Sortörés az első cat függvényben a sep="\n" paraméterrel adható meg.
Az append=TRUE paraméter előtt szereplő tartalom, a példa esetében a "világ!" szó bekerül az állományba. Az alapértelmezett beállítás: append=FALSE.
A write.table függvénnyel is kiírathatók az adatsorok fájlba.
write.table(objektumnév, "fájlnév.txt", sep="", na="NA", dec=",", col.names=TRUE vagy FALSE, row.names=TRUE vagy FALSE)
Paraméterek jelentése:
objektumnév: Az objektum, amit ki szeretnénk íratni.
"fájlnév.txt": A létrehozandó állomány neve.
Adott sor elemeit tagoló szimbólumot a sep paraméterrel lehet szabályozni. sep=" " – tagolás szóközzel (alapértelmezett) sep="\t" – tagolás tabulátorral sep="," – tagolás vesszővel sep=";" – tagolás pontosvesszővel
A tizedesjel a dec paraméterrel állítható be, alapértelmezetten pont.
col.names: Az oszlopok azonosítóit tartalmazza-e az állomány. Alapértelmezetten igen. row.names:
A sorok azonosítóit tartalmazza-e az állomány. Alapértelmezetten igen. A fájl nemcsak txt kiterjesztésű lehet, hanem például prn vagy csv is.
Utóbbi kiterjesztésű állomány létrehozatalára a write.csv függvény is alkalmazható, a write.table függvényhez hasonló szintaktikával.
Megjegyzések
Megjegyzés küldése