2. Az R kellemesen fapados, ami meghatározza a munka menetét is. Mindenképp szükség van bemenő adatokra és előre feltett kérdésekre. Bemenő adatonként én táblákat (csv) és nyers, formázatlan számsorokat használok, ezekkel az R nagyon jól boldogul. Miután beolvastuk az adatokat, az interaktív konzolon dolgozhatunk rajtuk, ez gyakorlatilag ugyanolyan, mint a python nyelvben: beírunk egy parancsot, és egyből megkapjuk a választ. Ez azért jó, mert egyből látjuk a végeredményt, és azért rossz, mert jól kell megfogalmazni (parancsként) a kérdéseinkent -- máskülönben sokat kell gépelnünk. Az interaktív konzol további jó tulajdonsága, hogy alapértelmezésként elmenti a teljes worspace-t: a teljes parancs-history-t és a memória teljes tartalmát(!) is. Vagyis, a korábbi munkánkat bármikor folytathatjuk.
3. Én eddig csak az R Cookbook-ot és néhány online leírást böngésztem át; úgy tűnik, hogy az R munkastílus alapvetően nem programokban gondolkodik. Lehet természetesen különféle vezérlő-szerkezeteket, ciklusokat és elágazásokat, függvényeket és osztályokat készíteni. Ennél azonban népszerűbb a rengeteg beépített (és letölthető) függvény használata, valamint az 'adatokban gondolkodás'. Számomra ez körülbelül azt jelenti, hogy ahelyett, hogy azt terveznénk meg, mit csináljon a számítógép az adatokkal, azt gondoljuk ki, mi történjen az adatokkal. Vagyis, miként változzanak meg -- aminek a legjobb módja, hogy felállítunk pár szabályt (függvényt), amin azután áteresztjük az adatainkat. Nem kivételekben és döntésekben gondolkodunk, hanem transzformációkban és szűrésekben. Egy kicsit nehéz elfelejteni az ciklusokat és az if-eket, ha az ember egy klasszikus programnyelv felől érkezik -- cserébe viszont átlátható, tömör kód és kevés hibalehetőség a jutalmunk.
4. És végül demonstrálja néhány példa, hogy milyen kellemes az R-rel való munka:
Egy mozdulattal beolvasunk egy táblát. Ezután h[x,y] formában férhetünk hozzá az adatokhoz.
h <- read.csv('meki_hir.csv')
Egy mátrix nem üres elemeit mind átírjuk 1-re. Először definiálunk egy függvényt, a következő sorban pedig alkalmazzuk egy mátrixra.
not_zero <- function(x) { if (x==0) return(0) else return(1)}
dtm0 <- apply(dtmM, 1:2, not_zero
Oszloponként összeadjuk egy mátrix elemeit:
TF = colSums(as.matrix(dtm0))
Mátrixszorzás. Az R alapszerkezetei a vektor és a mátrix, bármilyen műveletet végezhetünk elemenként és teljes mátrixon értelmezve is.
scores <- dtmM %*% ITF_DIAG
Kiválasztjuk egy mátrix első sorának 30 legnagyobb elemét:
sort(scores[1,], decreasing = TRUE)[1:30]
5. Az adatok mit sem érnek, ha nem tudjuk őket megnézni. Az R grafikai képességei nagyszerűek, használatuk gyerekjáték. Itt egy nagy adathalmaz 3 véletlenszerűen kiválasztott elemére nézünk rá, hogy lássuk, milyen az eloszlásuk.
par(mfrow=c(1,3))
plot(egy_alatt_(7,0.05)$freq)
grid()
plot(egy_alatt_(47,0.05)$freq)
plot(egy_alatt_(47,0.05)$freq)
grid()
plot(egy_alatt_(67,0.05)$freq)
grid()
savePlot("kutyiDist.png", type="png")
Nincsenek megjegyzések:
Megjegyzés küldése