# Az R mint számológép, alapvető aritmetikai operátorok: +,-,*,/,^,%%,%/% 2+2 # 4 3/2 # 1.5 2^10 # 1024, lehet 2**10 formában is 4^2-3*2 # 10, 16 - 6 (56-14)/6-4*7*10/(5^2-5) # -7, bonyolultabb példa 15%%4 # 3, maradékos osztás, ha 15-öt osztjuk 4-gyel, mennyi lesz a maradék? 15%/%4 # 3, egész osztás, hányszor (hány egészszer) van meg 15-ben a 4 # Objektumok létrehozása, az értékadás operátor # Az objektumok neve azonosító lehet, ami betűből, számjegyből, # pontból vagy aláhúzásjelből állhat, de nem kezdődhet számjeggyel # vagy aláhúzással # A kis- és nagybetűket megkülönbözteti az R n<-10 15->x1 X1<-150.12 # a tizedes vessző: '.' n # 10, az 'n' objektum értéke a képernyőn x1 # 15 X1 # 150.12 n<-7+9 # létező 'n' objektum értékét módosítjuk n # 16 # ';' -val elválasztva mehet több parancs egy sorba n1<-.3; n2<-2.3e+2; m<--0.5 # numerikus konstans megadások # Egész konstansokat a 0x illetve 0X előtaggal lehet # megadni hexadecimális alakban h1<-0xE0F; h2<-0X12; h1; h2 # Karakteres objektumok létrehozása: ''' vagy '"' karakterekkel határolva neve<-'Zsolt'; foglalkozasa<-"festő" # Logikai objektumok, logikai konstansok: TRUE, FALSE (valamint a T, F, melyek TRUE ill. FALSE értékű globális konstansok) fiu.e<-TRUE; van_kocsija<-FALSE; # Relációs operátorok: <, <=, >, >=, ==, != 1<2; .02 == 2e-2; "Zsolt" > "Péter"; "ősz" < 'tél'; T > F; # ellenőrizzük a Sys.getlocale()-lal a beállításokat pontszam<-17; jeles_e<-pontszam >= 16; jeles_e # Logikai operátorok: ! (unáris) logikai nem, & logikai és, | logikai vagy leany.e<-!fiu.e leany.e && fiu.e leany.e || fiu.e identical(200, 2e+2) # a == és != operátorok helyett while és if utasításokban # Objektumokat az operátorokon kívül függvényekkel is manipulálhatjuk # Függvények rnorm(1) # véletlen szám a képernyőre x<-2+rnorm(1) # lehetséges felhasználás # Függvény általános alakja: függvénynév(arg1, arg2, ..., argN) # példák függvényekre ls() # a memóriában található objektumok listázása, ua. minta az 'objects()' fv. ls(pattern="m") # csak az 'm' karaktert tartalmazó objektumok neveit listázza ls(pattern="^m")# csak az 'm' karakterrel kezdődő objektumok neveit listázza typeof(x) # "double", megadja az objektum típusát typeof(1:1) # "integer" typeof(leany.e) # "logical" typeof(neve) # "character" # Típusok lehetnek pl.: '"logical"', '"integer"', '"double"', '"complex"', # '"character"', '"raw"' and '"list"', '"NULL"' # Típusvizsgálat is.logical(x); is.integer(x); is.double(x) is.complex(x); is.character(x); is.numeric(x) is.list(x); is.function(x) # Típuskonverziós függvények as.logical(x); as.integer(x); as.double(x) as.complex(x); as.character(x); as.raw(x) as.numeric(x); as.list(x); as.function(x) # matematikai függvények (pi=3.141593 beépített konstans) sin(pi/2); cos(pi); tan(pi/2); 2*asin(1); acos(-1) # trigonometrikus függvények sqrt(9+16); # négyzetgyök függvény exp(1); exp(3) # exponenciális függvény log(exp(3)); log10(100) # logaritmus függvények # függvényekben lehetnek alapértelmezett argumentumok log(100); log(100, 10); log(100, base=10); log(base=10, x=100); # Karakterkezelő függvények nchar("abcd") # 4, a karakterek száma paste(neve, "egy jó", foglalkozasa) # karaktersorozatok összefűzése paste(sep="+", neve, "egy jó", foglalkozasa) # elválasztójel megadása substr(foglalkozasa, 1, 4); substr(foglalkozasa, 2, 4); # részsorozat strsplit("Elhull a virág, eliramlik az élet", split=" ") # szétvágás strsplit("Elhull a virág, eliramlik az élet", split=",") tolower("Kiss Géza") # kisbetűsre konvertál toupper("Kiss Géza") # nagybetűsre konvertál # grep, gsub # A legalapvetőbb objektumfajta a vektor # Eddig láttunk (numerikus, karakteres és logikai) konstansokat, # valamint skalár objektumokat, melyek tul.képp egyelemű vektorok # Vektor létrehozása a c() függvénnyel v1<-c(2,4,6,8); v1 v2<-c("körte", 'alma', "szilva"); v2 v3<-c(T, FALSE, 1<2); v3 # A vektor homogén összetett adatszerkezet (azonos típusú objektumokat tárol) v1m<-c(2,4,"6",8); v1m v2m<-c("körte", 'alma', "szilva", TRUE); v2m v3m<-c(T, FALSE, 1); v3m # Karakteresnek szánt adatot időzöjelekkel írjuk alma<-1:5 gyumolcsok<-c("korte", alma, "szilva"); gyumolcsok # Vektor létrehozása a ':' operátorral, általános alakja: from:to # A következő sorozatot generálja: from, from+1, from+2, ..., to v1<-1:10; v1 v2<-c(1,7:9); v2 # Vektor létrehozása a 'seq()' függvénnyel seq(1,10) # ua. mint a from:to seq(1,10,2) seq(from=1, to=10, by=2) # from, from+by, from+2*by, ..., to seq(1, 5, 0.5) seq(1, 5, length.out=11) # 11 hosszú sorozatot hoz létre, egyenlően beosztva 1 és 5 között # Vektor létrehozása a 'rep()' függvénnyel rep(4, 10) # a 4 értéket 10-szer megismétli rep(x=6, times=3) # a 6-ot 3-szor rep(c(1,2,3),2) # az x vektort 2-szer rep(c(1,2,3),each=2) # az x vektor minden elemét 2-szer rep(1:3, c(2,2,2)) # ua. rep(c(1,2,3),c(3,2,1)) # az x vektor minden elemét a times eleminek megfelelően rep(1:3, each=2, length.out=4) # az 4 elemet veszi rep(1:3, each=2, len=10) # még 4-et vesz az elejéről az újabb körben rep(1:3, each=2, times=3) # 18 elemű vektor, 3 teljes kör # Vektor létrehozása a 'sequence()' függvénnyel sequence(5) # 5 értékig sorozatot hoz létre 1-től sequence(3:5)# 3, 4 és 5 értékig sorozatot hoz létre 1-től # Vektor beolvasása a billetyűzetről z<-scan() # Néhány műveletek vektorral x<-1:4 # 1 2 3 4 x+2 # 3 4 5 6 y<-x^2; y # 1 4 9 16 x+y # 2 6 12 20 a<-c(1,2) b<-c(1,2,3,4) c<-c(1,2,3,4,5) a+b # 2 4 4 6 a+c # 2 4 4 6 6, de figyelmeztetés # Vektor-aritmetika az R-ben: elemenkénti végrehajtás # 1. eset: két azonos hosszú vektor x<-1:4 # 1 2 3 4 y<-rep(2, 4) # 2 2 2 2 z<-x + y # elemenkénti összeadás z # 3 4 5 5 x*y # 2 4 6 8 x/y # 0.5 1.0 1.5 2.0 x^y # 1 4 9 16 # 2. eset: x rövidebb y-nál, de x elemeinek száma osztja y eleminek számát # Ekkor a rövidebb vektor 1-szer vagy többször megismétlődik x<-1:2 # 1 2 y<-rep(2, 4) # 2 2 2 2 z<-x + y # elemenkénti összeadás z # 3 4 3 4 x*y # 2 4 2 4 x/y # 0.5 1.0 0.5 1.0 x^y # 1 4 1 4 # 3. eset: x rövidebb y-nál, de x elemeinek száma nem osztja y eleminek számát # Ekkor a rövidebb vektor elemei megismétlődnek; figyelmeztetéssel a művelet végrehajtódik x<-1:2 # 1 2 y<-rep(2, 4) # 2 2 2 2 z<-x + y # elemenkénti összeadás z # 3 4 3 4 x*y # 2 4 2 4 x/y # 0.5 1.0 0.5 1.0 x^y # 1 4 1 4 # 4. eset: Az egyik vektor egyelemű (skalár). Ez egy speciális 2. eset. x<-1:4 # 1 2 3 4 y<-3 # 3 z<-x + y # elemenkénti összeadás z # 4 5 6 7 x*y # 3 6 9 12 x/y # 0.3333333 0.6666667 1.0000000 1.3333333 x^y # 1 8 27 64 # További példák vektor-aritmetikára # A ':' operátornak általában prioritása van az egyéb aritmetika operátorokkal szemben 1:10-1 # 0 1 2 3 4 5 6 7 8 9 1:(10-1) # 1 2 3 4 5 6 7 8 9 # Operátorok precedencia szerint csökkenő sorrendben # $ # ^ # + - (unáris) # : # %xyz% # * / # + - (binér) # > >= <= < == != # ! # & && # | || # ~ (unáris és binér) # -> ->> # = # <- <<- # Amikor az ':' operátor kisebb prioritású 2^1:4 # 2 3 4 2^(1:4) # 2 4 8 16 # 100 elemű vektor ábrázolása plot(sin(seq(from=0,to=pi/2,length=100))) # Az objektumoknak a nevén és értékén kívül vannak attribútumai, melyek # meghatározzák az általa reprezentált adat fajtáját. # Létezik két alapvető attribútum: mód (mode) és a hossz (length) # Az x objektum tárolási módja és objektumainak száma x<-1:4; x mode(x); length(x) # "numeric", 4 length(x)<-2; x # 1 2, a vektor csonkolása # A módok szinte megegyeznek a 'typeof()' által visszaadott típusokkal, # egyik eltérés, hogy '"integer"' és '"double"' helyett '"numeric"'-ot ad. y<-x < 2; y mode(y); length(y) # "logical", 4 z<-rep("alma", 3); z mode(z); length(z) # "character", 3 # Tárolási szerkezetek, módok és (mód)homogenitás viszonya: # # vektor (vector) - numeric, character, complex vagy logical - homogén # faktor (factor) - numeric vagy character - homogén # tömb (array) - numeric, character, complex vagy logical - homogén # mátrix (matrix) - numeric, character, complex vagy logical - homogén # adattábla - numeric, character, complex vagy logical - inhomogén # (data frame) # idősor (ts) - numeric, character, complex vagy logical - homogén # lista (list) - numeric, character, complex vagy logical - inhomogén # A vektorról már volt szó. # A faktor kategórikus változó. # A tömb k dimenziós szerkezet. # A mátrix egy tömb, ahol k=2. # Az adattábla egy vagy több azonos hosszú vektor vagy faktor együttese. # Az idősor gyakorisági és dátum attribútumokat is tartalmaz. # A lista tetszőleges objektumokat - akár listákat is - tartalmaz. # Egy vektor számára az alapvető attribútumok elegendőek, de más tárolási # szerkezetek számára további attribútumok állnak rendelkezésre. # Az attribútum tetszőleges név-érték pár, amit az objektumhoz rendelünk # Vannak speciális jelentésű attribútumok: names, dim, dimnames, class # Attribútum hozzáadása egy vektorhoz x<-1:5; names(x)<-c("elégtelen", "elégséges", "közepes", "jó", "jeles"); x attributes(x) # x attribútumainak lekérdezése attr(x, "names") # x "names" attribútumának lekérdezése attributes(x)<-NULL # x attribútumainak törlése, NULL az üres listát jelenti attributes(x) # x attribútumainak lekérdezése attr(x, "names")<-c("","","","jó"); # kevesebb név attributes(x) # x attribútumainak lekérdezése, NA hiányzó értéket jelöl # Vektor létrehozása a mód és hossz figyelembevételével x<-vector(mode="numeric", length=10); x # 0 0 0 0 0 0 0 0 0 0 x<-numeric(10); x # ua. x<-logical(10); x # FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE x<-character(10); x # "" "" "" "" "" "" "" "" "" "" # Vektorok indexelése az '[]' oprátorral # 1. eset: indexelés numerikus skalárral x<-11:20; x # 11 12 13 14 15 16 17 18 19 20 x[1]; x[3]; x[10] # 11, 13, 20, az első index az 1-es x[5]<-2*x[4]; x # 11 12 13 14 28 16 17 18 19 20 x[-5] # mindegyik elem, kivéve az 5. # 2. eset: indexelés logikai skalárral x[TRUE] # mindegyik elem, ismétli a TRUE indexet, ua. mint a x[] x[FALSE] # egyik elem sem, ismétli a FALSE indexet # 3. eset: indexelés karakteres skalárral y<-11:20; y # 11 12 13 14 15 16 17 18 19 20 names(y)<-c("prim1", "", "prim2", "", "", "", "prim3", "", "prim4", "") y["prim3"] # 17 y[7] # 17, szintén működik # 4. eset: indexelés numerikus vektorral x[c(4,7,2)] # a 4., 7. és 2. elem kiválasztása ebben a sorrendben x[-c(4,7,2)] # a 2., 4. és 7. elemeken kívüliek kiválasztása x[2:3] # a 2. és 3. elem x[-(2:3)] # a 2. és 3. elemen kívül minden (x[-2:3] hibás, lsd. precedencia) # 5. eset: indexelés logikai vektorral x[c(TRUE, FALSE)] # minden páratlan elem, ismétli az indexvektort x < 15 # TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE x [x < 15] # 11 12 13 14, a logikai indexvektor 10 elemű # 6. eset: indexelés karakteres vektorral y[c("prim3","prim2")] # 17 13, nem ismétli a karakteres indexvektort # Néhány R függvény vektor argumentummal x<-(1:5)^2; x # 1 4 9 16 25 sqrt(x) # 1 2 3 4 5 sin(x*pi/10) sum(x) # x elemeinek összege max(x) # az x maximális értéke min(x) # az x minimális értéke range(x) # min és max length(x) # x hossza (objektumainak száma) mean(x) # mintaátlag sum((x-mean(x))^2)/(length(x)-1) var(x) # variancia sd(x) # a minta szórása median(x) # medián # Lista létrehozása: list(nev1=obj1, nev2=obj2, ..., nevN=objN) # Az objektumok tetszőlegesek lehetnek, a nevek pedig a 'names' attribútumhoz adódnak. hely<-c(1,2) L1<-list(nev=c("Zsolt", "Pál"), pont=c(21, 19), hely) L1 # három vektorból álló lista, a 3. nincs elnevezve names(L1) # Hivatkozás a lista elemeire L1[[1]]; L1[[2]]; L1[[3]]; # sorszámmal egy elem kiválasztása L1[[1]][2]; L1[[2]][2]; L1[[3]][2]; # "Pál", 19, 2, hivatkozás az 1. elem 2. elemére, a 2. elem 2. elemére és a 3. elem 2. elemére L1[["nev"]][2] # "Pál" L1$nev[2] # ua., ez a gyakoribb, a $ operátor használatával names(L1)[3]<-"helyezes" # elnevezzük a 3. listelemet is L1$helyezes # $-os hivatkozás a 3. listaelemre # lista összefűzése L2<-list(nev2=c("Éva", "Zoli"), pont2=c(22, 20), hely2=c(1,2)) L3<-c(L1, L2) L3$nev2 # "Éva" "Zoli" # Listák listája L3<-list(elso=L1, masodik=L2) L3$masodik$nev2 # "Éva" "Zoli" # A faktorok olyan speciális vektor jellegű objektumok, # amelyek velük azonos hosszú vektorok elemeinek egy # diszkrét osztályozását határozzák meg # A faktor objektumoknak van egy 'levels' nevű # attribútuma, amelynek értéke egy karakter vektor x<-rep(c(1,2,3), 5) # 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 xf<-factor(x);xf # faktor létrehozása attributes(xf) # 'xf' attribútumai levels(xf) # a kategóriák nevei levels(xf)<-c("nem", "igen", "nem tudom") # módosítjuk a kategóriák neveit xf # faktorok létrehozása a 'gl()' függvénnyel x<-gl(3, 5); x # 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 Levels: 1 2 3 x<-gl(n=3, k=5, length=22); x # hossz paraméter megadása: 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 Levels: 1 2 3 x<-gl(2, 5, labels=c("dohányzik", "nem dohányzik")); x # a faktor szintjeinek elnevezése # Tömbök, mátrixok # A tömb egy többszörösen indexelt adatszerkezet x<-1:1500 dim(x)<-c(3,5,100); # a 'dim' attribútum beállítása x # 3 dimenziós tömb, rendre 3, 5 és 100 elemszámmal attributes(x); x[1,2,11] # hivatkozás egy elemére x[,,1] # üres indexszel, tartományra hivatkozás x[2,3,] # Tömblétrehozás általános alakja: array(adat_vektor, dimenzio_vektor) z<-array(1:1500, c(3,5,100)) # ua. mint az előző példa x<-array(data=1:20, dim=c(4,5)); x # 4-szer 5-ös tömb (mátrix) x<-matrix(data=1:20, nrow = 4); x # ua. x<-matrix(data=1:20, nrow = 4, byrow=TRUE); x # sorfolytonosan tölti fel # További példák z<-1:12 m1<-matrix(z,ncol=6); m1 # a mátrix 2x6-os m2<-matrix(z,ncol=6,byrow=T); m2 # sorolytonosan feltöltve m3<-matrix(z,ncol=4); m3 # a mátrix 3x4-es m4<-matrix(z,ncol=4,byrow=T); m4 # sorolytonosan feltöltve m5<-matrix(z,nrow=3, ncol=8,byrow=T);m4 # 3x8-as mátrix, z-t még egyszer felhasználja m6<-matrix(z,ncol=8,byrow=T);m6 # 2x8-as mátrix, figyelmeztetés, z-t ismétli m7<-matrix(3:4, nrow=4, ncol=5); m7 # 4x5-ös mátrix, 3,4-et többször felhasználja m8<-matrix(18, nrow=3, ncol=7); m8 # 3x7-es mátrix, 18-al kitöltve # Mátrix felépítése vektorokból a<-c(1,2,3,4,5) b<-c(6,7,8,9,0) m1<-rbind(a,b); m1 # a vektorok a mátrix sorai lesznek m2<-cbind(a,b); m2 # a vektorok a mátrix oszlopai lesznek m3<-cbind(a,c(1,2)); m3 # új oszlop hozzáadása m4<-cbind(a, a, m2, b, a); m4 # huh... # Mátrix indexelése x[2,3] # hivatkozas egy elemre x[2,] # hivatkozas a 2. sorra x[,3] # hivatkozas a 3. oszlopra # Mátrix-hivatkozás i<-array(c(1:3,3:1), dim=c(3,2)); x x[i] # 3 7 11 x[i]<-0; x # Hivatkozott elemek nullázása # Mátrixok indexelése, mint a vektoroknál x[c(2,3),] # csak a 2. és a 3. sor x[,-2] # minden oszlop, kivéve a második # Mátrix sorainak és oszlopainak elnevezése rownames(x)<-c("Peti", "Zsolt", "Jenő", "Gergő") colnames(x)<-c("reggeli", "tízórai", "ebéd", "uzsonna", "vacsora") x; attributes(x) # Hivatkozás sor- és oszlopnevek alapján x["Zsolt",] x[,"ebéd"] # Sor, oszlop törlése mátrixból xm<-x[-2,]; xm # a 2. sor törölve 'xm'-ben xm<-x[,-2]; xm # a 2. oszlop törölve 'xm'-ben # Sor, oszlop beszúrása mátrixba xm<-rbind(x[c(1),], 11:15, x[c(2,3,4),]); xm # sor beszúrása a 2. pozícióba xm<-cbind(x[,c(1)], 11:14, x[, c(2,3,4,5)]); xm # sor beszúrása a 2. pozícióba # Az adattáblák, olyan speciális listák, amelynek a komponensei azonos # hosszúak. A komponensek vektorok, listák, adattáblák, faktorok és mátrixok lehetnek. # A statisztika szempontjából a legfontosabb adatszerkezet, ebben tároljuk az adatmátrixot. # A sorok a megfigyelt egyének (egyedek, minták), az oszlopok a változók. # Adattábla létrehozása d<-data.frame(nev=c("a", "b", "c", "d"), suly=c(72, 89, 65, 73), kor=c(21, 18, 19, 32)); d typeof(d); mode(d); is.list(d); is.data.frame(d) attributes(d) # A 'names' -ben az oszlopnevek, 'row.names'-ben a sorok egyedi nevei str(d) # Szerkezet kiiratása # Adattábla indexelése ua. mint a mátrixok ill. listák indexelése, pl: d$suly # hivatkozás a 'suly' oszlopra (változóra) d[2,] # hivatkozás a 2. sorra (egyedre) d[d$suly >=72,] # 72 kg-nál nagyobb egyenlő súlyú személyek keresése # Adattábla környezetbe helyezése attach(d) names(d) suly; nev; kor detach(d); nev # Sorok, oszlopok törlése, beszúrása ua., mint mátrix esetén, ill. d$magassag<-c(172, 181, 169, 174); d # oszlop hozzáfűzése # Input/output # Adattábla kimentése write.table(d, "c:/r_adataim.txt", row.names=TRUE, col.names=TRUE, sep=" ") d2<-read.table("c:/r_adataim.txt", header=TRUE, sep=" ") # vesszővel elválasztva write.csv(d, "c:/r_adataim.txt") d2<-read.csv("c:/r_adataim.txt", row.names=1) # SPSS állomány megnyitása library(foreign) pulse<-read.spss("g:/p5_pulse00.sav") # # Példa adattáblára # A táplálkozás módja befolyásolja-e a vér alvadási idejét? # Véletlenszerűen kiválasztottak 24 állatot az egyes diétákhoz (A B C D): # Véralvadási idők (sec): # A B C D # 62 63 68 56 # 60 67 66 62 # 63 71 71 60 # 59 64 67 61 # 65 68 63 # 66 68 64 # 63 # 59 # # Ugyanannak a változónak a különböző értékeit mindig azonos oszlopba rögzítsük # Pl. Excel táblázat két oszloppal (DIAT, CTIME) # Mentés másként... veralv.csv CSV (pontosvesszővel tagolt) formátum veralv<-read.csv2("c:/veralv.csv") # Mentés másként... veralv.txt Szöveg (tabulátorral tagolt) formátum veralv<-read.delim("c:/veralv.txt") #Interaktív módosítás fix(veralv) #Mentés write.csv2(veralv, "c:/veralv_m.csv", quote=F, row.names=F) # Adattábla interaktív módosítása fix(d2) d2<-edit(d2) # Új adattábla bevitele d3=data.frame() fix(d3) fix(d3, edit.row.names=T) # Környezetek, keresési útvonalak # A keresési útvonal környezetek listája, a szimbólumfeloldás sorrendjét jelenti # Objektum eltávolítása: rm(..., list=character(0)) rm(list=ls()) # mindem objektum eltávolítása nev<-rep("hat",6) d<-data.frame(nev=c("a", "b", "c", "d"), suly=c(72, 89, 65, 73), kor=c(21, 18, 19, 32)); d attach(d) # objektum keresési listába, új környezet létrehozása a 'd' adattábla másolássával nev; kor library(MASS) # könyvtár betöltése search() # az 'attach'-elt objektumok és betöltött könyvtárak listája find("nev") # hol szerepel ez az objektumnév ls(); ls(envir=as.environment("d")) # objektumnevek listája a globális és a 'd' nevű környezetben kor<-2*kor; kor # új változó globális környezetben kor<<-3*kor; kor # a 'd' környezetben változtatja a másolat értékét d$kor<-4*kor; kor # az eredeti 'd' adattábla 'kor' tagját módosítja ls() rm(kor); kor # törlés a globális környezetből detach(d) # objektum és könyvtár törlése a keresési listából d$kor; kor detach(package:MASS) search() # Adatkészletek (csomagok részei, felhasználható adattáblák) data() # elérhető adatkészletek listája a csomagok alapján data(package="MASS") # a MASS csomag adatkészletei data(cats, package="MASS") # a cats adatkészlet betöltése help(cats, package="MASS") cats; str(cats) summary(cats) search() women ?women ls() data(women) # a women adatkészlet betöltése az alapértelmezetten elérhető 'datasets' csomagból ls() summary(women) # women adattábla transzformálása women2<-data.frame(height=women$height*2.54, weight=round(women$weight*0.4536,2)) women2; str(women2); summary(women2) # Eloszlások az R-ben # Prefixumok lehetnek: # d-sürűségfüggvény, p-eloszlásfüggvény, # q-kvantilis függvény, r-véletlenszám generálás # binomiális ...binom # Chi2 ...chisq # Gaussian (normális) ...norm # Poisson ...pois # Student(t) ...t # uniform ...unif # Wilcoxon’s statistics ...wilcox, ...signrank # # Véletlenszám generálás (r) plot(runif(10000, min=1, max=10)) # egyenletes, 10000 véletlen szám 1 és 10 között plot(rnorm(10000, mean=3, sd=5)) # normális x<- rpois(50, lambda=4); table(factor(x, 0:max(x))) # Poisson # Eloszlásfüggvény (p) pnorm(0); pnorm(3, mean=3, sd=7); # normális eloszlás x<-seq(0,3,by=.1); cbind(x, Fx=pnorm(x)) # eloszlásfv. táblázat x=rt(10, 20); t.test(x) xt=mean(x)/(sd(x)/sqrt(length(x))); 2*(1-pt(abs(xt),length(x)-1)) # Sűrűségfüggvény (d) dnorm(0); curve(dnorm, from=-3, to=3, n=300) # Kvantilis (q), valószínűséget vár paraméterben, az eloszlásfüggvény inverze # NULL objektum, objektum hiányára, nemdefiniáltságára utal, is.null() függvénnyel vizsgálható a NULL-ság # Grafika az R-ben ############################################################## demo(graphics) demo(persp) # A grafikai függvények eredménye a grafikai eszközre kerül (ablak vagy állomány) # Léteznek magas szintű (új grafikát indító) és alacsony szintű (létezőhöz hozzáadó) rajzoló függvények. ?device # A lehetséges grafikus eszközök windows(); windows(); jpeg(); pdf() # grafikus eszközök megnyitása dev.list() # nyitott grafikus eszközök listája dev.cur() # melyik az aktuális grafikus eszköz dev.set(2) # a 2-es eszköz aktuálissá tétele dev.off() # az aktuális eszköz lezárása dev.off(3) # a 3-as eszköz lezárása graphics.off() # az összes nyitott eszköz lezárása # A magas szintű függvények automatikusan nyitnak egy új eszközt (tipikusan ablakot) # A képernyő (rajzterület) felosztása split.screen(c(2,1)) # két részre osztjuk a képernyőt split.screen(c(1,3), screen = 2)# az alsó felét további 3 részre screen(1) # most az első részre fogunk rajzolni plot(10:1) screen(4) # most a negyedik részre plot(10:1) close.screen(all = TRUE) # kilépés a képernyőfelsztásból # Felosztás a 'layout()' függvénnyel layout(matrix(1:4, 2, 2)) # 4 részre osztjuk egy mátrixszal layout.show(4) # a részek megjelenítése m <- matrix(c(1:3, 3), 2, 2) layout(m) layout.show(3) # a részek szélessége és magassága változhat m <- matrix(1:4, 2, 2) layout(m, widths=c(1, 3), heights=c(3, 1)) layout.show(4) plot(1:10); plot(1:10); plot(1:10); plot(1:10) # Magasszintű függvények x <- rnorm(10) y <- rnorm(10) # A 'plot()' függvény plot(x) # az x értékeinek megjelenítése sorrendben az y tengelyen plot(x,y) # az (x,y) pontpárok megjelenítése plot(x, y, main="Véletlen számok", sub="Normális eloszlás") # Grafikon cím/alcím hozzáadása plot(x, y, xlab="10 véletlen szám", ylab="Még 10 véletlen szám") # Tengelyek feliratozása plot(x, y, las=3) # Tengelycímkék elhelyezkedési iránya: labs=0:3, 0 alapértelmezett plot(x, y, axes=F) # Tengelyek és keret elrejtése plot(x, y, xlim=c(-3,3), ylim=c(-3,3))# Az x és y tengelyek alsó és felső határait adja meg plot(x, y, type="p") # alapértelmezés, pontok kirajzolása plot(x, y, type="l") # összeköti a pontokat vonallal plot(x, y, type="b") # pontok és vonalak is plot(x, y, type="o") # pontok és vonalak is, a vonal hozzáér a ponthoz plot(x, y, type="h") # vonalak a pontoktól az x tengelyig plot(x, y, type="s") # lépcsős megjelenítés, létezik 'S' is plot(x, y, type="n") # nem jelenít meg pontokat plot(x, y, pch=10) # pontszimbólum változtatása pch=1:25 lehetséges, vagy tetszőleges pch='*' plot(x, y, pch=16, col="red") # pontszimbólum színének változtatása plot(x, y, pch=22, col="red", bg="yellow") # pontszimbólum háttérszínének változtatása, ha pch=21:25 colors() # használható színek listája plot(x, y, pch=22, col="#CCDD11", bg=rgb(255, 255, 0, max=255)) # RGB kód is használható a színek megadásánál, amit az 'rgb()' függvény is szolgáltathat plot(x, y, bty="o") # a határoló teljes keret beállítása, alapértelmezés plot(x, y, bty="l") # csak baloldali és alsó keretet rajzol plot(x, y, bty="7") # csak jobboldali és felső keret, még: "c", "u", "]", "n" is lehet plot(x, y, tcl=.4) # rácsjelek méretének beállítása (alapértelmezett: -0.5) plot(x, y, tck=1) # rácsvonalak behúzása plot(x, y, cex=0.6) # szövegek és a pontok méretét állítja az alpértelmezett 1-hez viszonyítva plot(x, y, xlab="10 véletlen szám", ylab="Még 10 véletlen szám", xlim=c(-3, 3), ylim=c(-3, 3), pch=22, col="red", bg="yellow", bty="l", tcl=0.4, main="Véletlen számok", sub="Normális eloszlás", las=1, cex=1.5) # A magaszintű grafikai függvények paraméterei a 'par()' függvénnyel is módosíthatók par() # az aktuális paraméterértékek listája ?par par(col="red") # egy paraméter beállítása # A 'hist()' függvény x<-rep(1:10, c(1,2,3,4,5,5,4,3,2,1)) hist(x) # hisztogram kirajzolása layout(matrix(1:4, ncol=2)) hist(x) hist(x, col="gray", labels = TRUE) hist(x, breaks=11, col="yellow", labels = TRUE) hist(x, breaks=0:10, col=rainbow(20), labels = TRUE, main="Példa hisztogramra") dev.off() # A 'barplot()' függvény layout(matrix(1:4, ncol=2)) x <- table(rpois(100, lambda=5)) barplot(x, col=rainbow(20)) barplot(x, col=rainbow(20), space = 1.5) barplot(x, col=rainbow(20), horiz = T) barplot(VADeaths, beside = TRUE, col = c("lightblue", "mistyrose", "lightcyan","lavender", "cornsilk"), legend = rownames(VADeaths), ylim = c(0, 100)) dev.off() # A pie() függvény: kördiagram layout(matrix(1:4, ncol=2)) x <- table(rpois(100, lambda=5)) pie(rep(1,12), col = rainbow(20)) pie(c(2,3,2,3,5), radius=0.9, clockwise = T) pie.sales <- c(0.12, 0.3, 0.26, 0.16, 0.04, 0.12) names(pie.sales) <- c("Honda", "Toyota", "Mazda", "Volkswagen", "Egyéb", "Skoda") pie(pie.sales) pie(pie.sales, col = gray(seq(0.4,1.0,length=6))) dev.off() # A boxplot() függvény x=rchisq(100,10) boxplot(x,range=0) # a szélsőséges értékek is, alapértelmezett range=1.5 d=data.frame(x=rep(c("A","B","C"), each=100), y=c(rchisq(100,10),rchisq(100,14), rchisq(100,13))) bp=boxplot(y~x, data=d) bp # A curve() függvény: x szerinti függvény grafikonjának megrajzolása curve(sin) curve(12*x**2+3*x-1) curve(dchisq(x,df=1), from=0, to=20) curve(dchisq(x,df=2), from=0, to=20, add=T, col="red") curve(dchisq(x,df=3), from=0, to=20, add=T, col="green") curve(dchisq(x,df=4), from=0, to=20, add=T, col="blue") curve(dchisq(x,df=6), from=0, to=20, add=T, col="orange") curve(dchisq(x,df=10), from=0, to=20, add=T, col="purple") curve(dnorm, from=-3, to=3) curve(dt(x,df=1), add=T, col="red") curve(dt(x,df=2), add=T, col="green") curve(dt(x,df=3), add=T, col="blue") curve(dt(x,df=4), add=T, col="orange") curve(dt(x,df=10), add=T, col="purple") # vagy curve(dchisq(x,df=1), from=0, to=20) for(k in c(2,3,4,6,10)) curve(dchisq(x,df=k), from=0, to=20, add=T, col=rainbow(20)[k]) curve(dnorm, from=-3, to=3) for(k in c(2,3,4,6,10)) curve(dt(x,df=k), add=T, col=rainbow(20)[k]) ## Alacsony szintű grafikus függvények # Pontok rajzolása plot(-4:4, -4:4, type = "n") # csak a koordinátákat állítja be points(rnorm(200), rnorm(200), col = "red") points(rnorm(100)/2, rnorm(100)/2, col = "blue", cex = 1.5) # Vonalak rajzolása plot(cars, main="Stopping Distance versus Speed") lines(lowess(cars)) # Továbbá: text(), abline(), legend(), stb.