Professional Documents
Culture Documents
Abari Klmn
DE, Pszicholgiai Intzet
abari.kalman@gmail.com
Tartalomjegyzk
Tartalomjegyzk ......................................................................................................................... 2
Elsz ......................................................................................................................................... 4
1. Bevezets ................................................................................................................................ 5
1.1. Mi az R? .......................................................................................................................... 5
1.2. Az R teleptse ................................................................................................................ 5
1.3. Munkafolyamat (session) az R-ben ................................................................................. 5
1.4. Az R parancssoros hasznlata ......................................................................................... 6
1.5. Szkriptek vgrehajtsa..................................................................................................... 7
1.6 A csomagok hasznlata .................................................................................................... 8
1.7. Segtsg az R hasznlathoz ............................................................................................ 9
2. Az R alapjai .......................................................................................................................... 11
2.1. Szmols az R-ben ........................................................................................................ 11
2.2. Objektumok ................................................................................................................... 13
2.2.1. rtkads ................................................................................................................ 13
2.2.2. Objektumok elnevezse.......................................................................................... 14
2.3. Fggvnyek ................................................................................................................... 15
2.4. Adattpusok az R-ben .................................................................................................... 18
2.4.1. Karakteres adatok ................................................................................................... 18
2.4.2. Logikai adatok ........................................................................................................ 20
3. Adatszerkezetek ................................................................................................................... 22
3.1 Vektorok ......................................................................................................................... 22
3.1.1. Vektorok ltrehozsa .............................................................................................. 22
3.1.2. Mveletek vektorokkal ........................................................................................... 26
3.1.3. Fggvnyek vektorokkal ........................................................................................ 27
3.1.4. Az NA hinyz rtk .............................................................................................. 28
3.1.5. Az Inf s a NaN ...................................................................................................... 28
3.1.6. Objektumok attribtumai ....................................................................................... 29
3.1.7. Vektorok indexelse ............................................................................................... 30
3.1.8. Vektorok rendezse ................................................................................................ 33
3.1.9. Elre definilt objektumok, nevestett konstansok ................................................ 34
3.2. Faktorok ........................................................................................................................ 34
3.3. Mtrixok s tmbk ...................................................................................................... 36
3.3.1 Szmtsok a mtrix soraiban s oszlopaiban ......................................................... 40
3.3.2 Sorok s oszlopok kezelse ..................................................................................... 43
3.5 Listk .............................................................................................................................. 44
3.5 Adattblk (dataframes) ................................................................................................. 47
3.5 Idsorok .......................................................................................................................... 49
4. Adatok olvassa s rsa ....................................................................................................... 50
4.1. Adatok beolvassa ......................................................................................................... 50
4.1.1.A c() s a scan() fggvnyek ................................................................................... 50
4.1.2. A read.table() csald ............................................................................................... 52
4.1.3. A read.fwf() fggvny ............................................................................................ 52
4.1.4. Binris llomnyok olvassa .................................................................................. 53
4.1.5. Adatbzisok elrse ................................................................................................ 53
4.2. Adatok kirsa ............................................................................................................... 53
4.2.1. A cat() fggvny..................................................................................................... 54
4.2.2. A write.table() csald ............................................................................................. 54
Elsz
E jegyzet clja az R nyelv s krnyezet elsajttsnak segtse. A jegyzetet elssorban a
kezd R felhasznlknak ajnljuk. A lertak megrtshez a kzpiskolai matematikn tl
semmilyen elzetes ismeret nem szksges.
A jegyzetben az R 2.6.2-es (2008-02-08) verzijnak Windows platformra sznt
vltozatt hasznljuk a pldk vgrehajtshoz. Ez semmifajta megszortst nem jelent, a
hasznlt parancsok a ksbbi verzikban s az egyb platformokon (Linux, Mac OS X) fut R
pldnyokban is ugyangy hasznlhatk.
rmmel
fogadjuk
az
Olvasink
abari.kalman@gmail.com cmre vrjuk.
szrevteleit,
amelyeket
az
1. Bevezets
1.1. Mi az R?
Az R egy magas szint programozsi nyelv s krnyezet, melynek legfontosabb felhasznlsa
az adatelemzs s az ahhoz kapcsold grafikus megjelents.
Az R nyelv egy interpretlt szkript nyelv, azaz az utastsainkat nem fordthatjuk le futtathat
binris llomnny, hanem a vgrehajtand parancsokat az R egyesvel rtelmezi (ellenrzi a
parancs szablyossgt, ha megfelelnek tallja rgtn vgrehajtja). Az R program
legfontosabb rsze teht az R-rtelmez (interpreter), amely a parancsok vgrehajtsrt
felels.
Az R-interpreterhez ktfle mdon juttathatunk parancsot, vagy interaktvan, az egyes
parancsok begpelsvel, vagy ktegelten n. szkript mdban, elre sszegyjttt
parancsok formjban.
A parancsok eredmnye megjelenhet a terminlban, llomnyokban vagy adatbzisokban is,
de grafikus megjelentsre is van lehetsgnk.
A legegyszerbb alapmveletektl kezdve a bonyolult statisztikai eljrsokig nagyon sokfle
mvelet hajthat vgre az R-ben. Az egyes mveletek eredmnyeit n. objektumokban
trolhatjuk. A mveletek pedig n. opertorok s fggvnyek formjban jelennek meg az Rben.
Az R szmos beptett fggvnyt bocst a felhasznlk rendelkezsre, de szmos kiegszts
is kszlt az R-hez, melyeket n. csomagok (package) formjban rhetnk el. A csomag
fggvnyeket s objektumokat tartalmazhat, amelyeket a csomag teleptsvel s betltsvel
tehetnk elrhetv.
1.2. Az R teleptse
Els kzeltsben gondoljunk az R-re, mint egy tbbplatformos alkalmazsra, vagyis egy
olyan programra, amely futtathat Windows, Linux s Mac OS X opercis rendszereken is.
Az R szabad szoftver, teht btran letlthetjk a kedvenc opercis rendszernknek megfelel
telept pldnyt az R hivatalos oldalrl (http://www.R-project.org), majd, mint egy
kznsges alkalmazst, a szoksos mdon telepthetjk a szmtgpnkre.
A Windows opercis rendszerekre sznt verzi rszletes teleptse megtallhat [1]ben, a 80-84. oldalon.
Hosszabb, bonyolult parancsok gpelsnl gyakran elfordul, hogy nem teljes a begpelt
parancs, valami mg hinyzik belle (pl. egy zr kerek zrjel). Ezt az R szreveszi s az
ENTER megnyomsa utn egy + prompt megjelentsvel jelzi ezt szmunkra. A +
prompt utn van lehetsgnk a hinyz rszek ptlsra, majd ha kszen vagyunk az
ENTER billentyvel az sszes eddig mg vgre nem hajtott sort elkldhetjk az
rtelmeznek.
> paste("Ez mr",
+ "j"
+ )
[1] "Ez mr j"
Ha nem talljuk a hinyz rszt a parancsunkban, akkor az R-nek ezen knyelmi funkcija
oda vezethet, hogy rkk + promptot kapjuk az ENTER megnyomsa utn. Ezt a helyzetet
hivatott megoldani az ESC billenty, mellyel megszakthatjuk az rtelmezt, azaz ebben a
szituciban egy j sort, immr egy > prompttal kezdd (res) sort kapunk a konzol
ablakban.
Az R parancssoros hasznlatt mg tovbbi 2 dolog teszi knyelmesebb. Egyrszt a
korbban vgrehajtott parancsainkat (history) visszahvhatjuk, lapozhatunk bennk elre,
htra. Erre a FEL/LE NYL billentykkel van lehetsgnk. Termszetesen, az gy
visszahvott parancsot tetszleges mdon tszerkeszthetjk: naviglhatunk a sorban elre
htra, beszrhatunk/trlhetnk karaktereket vagy hasznlhatjuk a vgasztal
billentyparancsait. A visszahvott s mdostott parancsot az ENTER segtsgvel jra
vgrehajthatjuk, s ehhez mg a sor vgre sem kell a szvegkurzort pozcionlni, az a sorban
tetszleges helyen llhat, az R mgis a teljes sort fogja rtelmezni.
A msik knyelmi lehetsg a TAB billenty hasznlata, amellyel az elkezdett, mg
be nem fejezett sorokat egszthetjk ki. Ha egy sort tbbflekppen is kiegszthet az R,
akkor egy listt kapunk a lehetsgekrl, amelyet tovbbgpelssel szkthetnk, ha pedig
csak egyetlen szba jhet befejezse van a begpelt karaktereknek, akkor a TAB
megnyomsa utn ezzel a rsszel kiegszl az elkezdett sorunk. gy nemcsak egyszeren
gpelst, ill. idt takarthatunk meg, hanem pl. tjkozdhatunk a korbban ltrehozott
objektumok nevrl vagy az elrhet fggvnyek nvrl s paramtereirl is.
Az objektum, a fggvnyek s az egyb ebben a fejezetben homlyosan hagyott
fogalmak definciit a jegyzet ksbbi rszeiben rszletesen trgyaljuk.
"package:graphics"
"package:datasets"
"package:base"
"package:foreign"
"package:stats"
"package:grDevices" "package:utils"
"package:methods"
"Autoloads"
A fenti pldban a foriegn csomag betltst s annak hatst kvethetjk nyomon. Ezutn a
csomagban lv fggvnyeket s objektumokat a parancsainkban felhasznlhatjuk.
Egy adott csomagban (esetnkben a foreign csomagban) lv fggvnyek s objektumok a
> library(help=foreign)
vagy a
> help(package=foreign)
vagy a rvidebb
> ?t.test
".__C__maov"
"aov"
"model.frame.aovlist" "summary.aov"
"terms.aovlist"
"TukeyHSD.aov"
Utols lehetsgknt ejtsnk szt a demo() fggvnyrl, amellyel olyan beptett szkripteket
futtathatunk, amelyek az R tudst, erejt hivatottak demonstrlni. Prbljuk ki a
demo(graphics)
demo(persp)
demo(plotmath)
demo(Hershey)
parancsokat.
Kzssgi oldalakon tartalom alapjn kereshetnk az RSiteSearch() fggvny segtsgvel:
> RSiteSearch("repeated measures")
10
2. Az R alapjai
2.1. Szmols az R-ben
Kezdjk az R nyelv megismerst egy egyszer sor begpelsvel.
> 2+2
[1] 4
rtke
1, -1,
0.4
1, -1, 2, 100
11
Lers
2,
100,
3.5,
szmok az L suffix
hasznlatval
1.2e3, 3e+4, .6e-2, 4e1L
exponencilis
alak
egsz s nem egsz
szmok
hexadecimlis (16-os
szmrendszerben felrt
szmok)
Mvelet
Plda
Plda eredmnye
^ (vagy **)
hatvnyozs
+ - (unris)
eljelek
%% %/%
* /
+ - (binr)
sszeads s kivons
2^3
2**3
+3.3
-.5
13%%4
15%/%4
2*3
4 / 2
2 + 3
2 - 3
8
8
3.3
-.5
1
3
6
2
5
-1
12
2.2. Objektumok
Ha egy kifejezs rtket nem egyszeren a kpernyn szeretnnk megjelenteni, hanem azt
ksbb is fel akarjuk hasznlni, akkor objektumokat kell ltrehoznunk. A memriban trolt
adatok elrsre az R-ben objektumokon keresztl lehetsges. (Ms nyelvekben ezt
vltoznak vagy szimblumnak nevezik, ha nem okoz flrertst, akkor mi is hasznlhatjuk
ezeket az elnevezseket.)
> 117/11+2^3
[1] 18.63636
Ha azonban ltrehozunk egy x nev objektumot a fenti mdon, akkor ezt az rtket tovbbi
kifejezsekben is szerepeltethetjk. Egyszeren azokon a helyeken, ahol eddig szmok
jelentek meg a kifejezsben, oda ez az x objektumnv is berhat.
rhatjuk teht a kvetkezket:
> x+2
[1] 20.63636
> 2*x^3+5
[1] 12950.34
Minden objektumnak van neve s tartozik hozz a memriban egy terlet, ahol a krdses
rtk trolsra kerl. Esetnkben az objektum neve x a hozz tartoz memriaterleten pedig
a 18.63636 rtket trolja az R.
Az objektumok kezelse az R-ben alapveten 3 dolgot jelent: (1) az objektum
ltrehozsa, (2) az objektum rtknek lekrdezse s (3) az objektum rtknek
megvltoztatsa. (Ksbb ltjuk, mi mindent tehetnk mg az objektumokkal.)
2.2.1. rtkads
Objektumot rtkadssal hozhatunk ltre. Az rtkads tartalmaz egy rtkads opertort,
melynek alakja <-, vagyis egy kisebb jel s egy mnusz eljel egyms utn rva szkz
nlkl. (Tovbbi rtkad opertorok a ->, <<-, ->> s a =. Ezekrl ksbb lesz sz.)
Az rtkads ltalnos alakja: objektumnv <- kifejezs. Ahol lehet a tovbbiakban
ezt a balra nyl alak rtkad opertort hasznljuk az rtkads sorn. Az egyszersg
kedvrt a balra nyl eltt lv objektumnevet az rtkads bal oldalnak, az utna lv
kifejezst az rtkads jobb oldalnak nevezzk.
Ha nem ltez objektumnevet szerepeltetnk az rtkadsban, akkor az R ltrehoz egy ilyen
nev j objektumot, a hozz tartoz memriaterleten pedig az rtkads jobb oldaln lv
kifejezs kirtkelse utn kapott rtket trolja el.
> a <- 1+2
13
Fent, a korbban nem ltez a objektumot hoztuk ltre. Az rtkads utn a mr ltez
objektum, gy a munkafolyamatunk munkaterlethez tartozik.
Ha az rtkadsban hasznlt objektumnv mr ltezik, akkor a jobb oldali kifejezs
kirtkelse utn a kapott rtkkel fellrja a bal oldali objektumhoz tartoz memriaterletet.
Ezzel a mdszerrel teht korbban ltrehozott objektum rtkt mdosthatjuk.
> a <- 10/3
parancs utn a
> Pulzus.atlag
Error: object "Pulzus.atlag" not found
sor hibt jelez, azaz a Pulzus.atlag objektumot nem tallja az R. Minden olyan esetben, ha
nem ltez objektumra hivatkozunk, a fenti hibazenet jelenik meg a konzolban.
> Pulzus.atlag <- 69.37
> pulzus.atlag; Pulzus.atlag
[1] 72.86
[1] 69.37
14
2.3. Fggvnyek
Az aritmetikai kifejezseinkben hasznlhat opertorok nem teszik lehetv minden
matematikai mvelet elvgzst. Mit tegynk, ha a 2 ngyzetgykt szeretnnk kiszmolni? A
ngyzetgykvons opertor nem ltezik az R-ben, de ebben a specilis esetben a hatvnyozs
opertor segtsgvel elrhetjk a clunkat.
> 2^0.5
[1] 1.414214
Lers
Plda
Plda rtke
abs(x)
abszoltrtk fggvny
abs(-1)
sign(x)
eljel fggvny
sign(pi)
15
sqrt(x)
ngyzetgyk fggvny
sqrt(9+16)
exp(x)
exponencilis fggvny
exp(1)
2.718282
log(x)
log(exp(3))
log(x,base)
log(100, 10)
log10(x)
log2(x)
log10(1000)
log2(256)
3
8
cos(x)
cos(pi)
-1
sin(x)
sin(pi/2)
tan(x)
tan(0)
acos(x)
asin(x)
atan(x)
inverz trigonometrikus
radinban mrt)
2*asin(1)
acos(-1)
atan(pi)
3.141593
3.141593
1.262627
cosh(x)
sinh(x)
tanh(x)
cosh(0)
sinh(0)
tanh(0)
1
0
0
acosh(x)
asinh(x)
atanh(x)
inverz
hiperbolikus
fggvnyek
acosh(0)
asinh(0)
atanh(0)
NaN
0
0
round(x,
digits=0)
round(1.5)
round(-1.5)
2
-2
floor(x)
floor(1.5)
floor(-1.5)
1
-2
ceiling(x)
ceiling(1.5)
ceiling(-1.5)
2
-1
trunc(x)
trunc(1.5)
trunc(-1.5)
1
-1
fggvnyek
(x
trigonometrikus
Ebbl kiolvashat, hogy a log() fggvnynek 2 paramtere van. Az elst x-nek, a msodikat
base-nek nevezik. A msodik paramter alaprtelmezett rtkkel is rendelkezik, teht ez a
paramter a hvsnl elhagyhat, mg az x argumentum megadsa ktelez. A base
paramter rtke knnyen kiderthet az
> exp(1)
[1] 2.718282
16
sor termszetesen ugyanazt az eredmnyt szolgltatja, csak most explicit mdon kzltk,
hogy az aktulis paramterben szerepl 2-es rtket az x nev formlis paramternek
feleltetjk meg. Ez most felesleges gpelst jelentett s ltalban is elmondhatjuk, hogy
matematikai fggvnyek esetben az oly gyakori x argumentumnevet szoks szerint nem
hasznljuk az aktulis paramterek elnevezsre.
Hvjuk most kt argumentummal a log() fggvnyt. A 100 szm 10-es alap logaritmust a
> log(100, 10)
[1] 2
vagy akr
> log(x=100, base=10)
[1] 2
formban is.
Arra is lehetsg van, hogy ha az nem okoz flrertst az R szmra, megcserljk az aktulis
paramterek sorrendjt. A legbiztonsgosabb ekkor az sszes paramter nevestse
> log(base=10, x=100)
[1] 2
17
Az karakterkonstansokat hatrol idzjel lehet egyszeres s dupla is, de egy konstanson bell
nem keverhetjk ket. Az R a dupla idzjelet rszesti elnyben.
Egy karakterkonstans tetszleges karaktert (bett, szmjegyet, rsjeleket, szkzt, stb)
tartalmazhat, egyedl azt az idzjelet kell elkerlnnk, amelyet a konstans ltrehozsnl
hasznltuk.
18
Jelentse
(szimpla idzjel)
(dupla idzjel)
\n
j sor karakter
\r
\t
tabulator
\\
\ (backslash) karakter
Lers
Plda
Plda rtke
paste(,sep)
paste(a, b, sep==)
a=b
nchar(x)
sztringek
sszefzse
karakterszrting
hossza
nchar(alma)
substr(x,start,stop)
substr(alma, 3, 5)
ma
tolower(x)
kisbetsre konvertl
tolower("Kiss Gza")
"kiss
gza"
toupper(x)
nagybetsre
konvertl
toupper("Kiss Gza")
"KISS
GZA"
chartr(old,new,x)
karakterek cserje
chartr("it","l","titik")
"llk"
cat(, sep)
kirats
cat(alma,fa\n,sep=)
almafa
grep(),regexpr(),
gregexpr()
rszsztringek
keresse
sub(), gsub()
rszsztringek
cserje
19
Mvelet
Plda
Plda eredmnye
<
kisebb
>
nagyobb
<=
kisebb egyenl
>=
nagyobb egyenl
==
egyenl
!=
nem egyenl
1<2
alma<krte
3<(1+2)
abc>ab
1<=-.3
l<=el
3/4>=7/9
aki>=gi
20==2e1
Len==len
exp(1)!=pi
Len!=len
TRUE
TRUE
FALSE
TRUE
FALSE
TRUE
FALSE
TRUE
TRUE
FALSE
TRUE
TRUE
Mvelet
Plda
Plda eredmnye
logikai NEM
& s &&
logikai S
| s ||
logikai VAGY
!(1<2)
!TRUE
!FALSE
TRUE & TRUE
TRUE & FALSE
FALSE & TRUE
FALSE & FALSE
TRUE | TRUE
TRUE | FALSE
FALSE
FALSE
TRUE
TRUE
FALSE
FALSE
FALSE
TRUE
TRUE
20
FALSE | TRUE
FALSE | FALSE
21
TRUE
FALSE
3. Adatszerkezetek
Az elz fejezetben lttuk, hogy a konstansok s az objektumok alapveten 3 tpusba
sorolhat rtket vehetnek fel. Ezek a numerikus, karakteres s logikai tpusok voltak. Az
eddigi pldkban az objektumokhoz hozzrendelt rtk elemi volt. Egy numerikus vltoz a
hozzrendelt memriaterleten pl. a 12 rtket trolhatja, egy msik karakteres objektum a
janur rtket s egy logikai objektum pl. a TRUE rtket.
Az R azonban tmogatja az sszetettebb adatszerkezeteket is, st a fenti elemi
esetek az n. vektor adatszerkezet legegyszerbb, specilis vltozatnak tekinthetk. Az
sszetett adatszerkezetre gy gondolhatunk, hogy az objektum neve nem egyetlen szmra,
karaktersorozatra vagy logikai rtkre vonatkozik, hanem ezekbl tbbre: pl. kt szmra, vagy
hrom karaktersorozatra, vagy tz logikai rtkre, esetleg ezekre mind egytt.
Az R a kvetkez adatszerkezeteket tartalmazza: vektor (vector), faktor (factor),
mtrix (matrix), tmb (array), lista (list), adattbla (data frame), idsor (ts).
3.1 Vektorok
Az R legalapvetbb adatszerkezete a vektor. A vektort egyms melletti cellkban trolt
rtkek sorozataknt kpzelhetjk el, mely rtkek mindegyike azonos tpus. gy azt
mondhatjuk, hogy a vektor azonos tpus (egynem, homogn) adatok egydimenzis
egyttese. A vektor fontos jellemzje, hogy homogn, teht a vektort alkot rtkek vagy
kizrlag numerikus konstansok, vagy kizrlag karakteres konstansok, vagy kizrlag
logikai konstansok.
A fenti pldban a v1 objektum egy 4 elem vektor. Az els eleme a 2 numerikus konstans, a
msodik eleme a 4, a harmadik a 6 s a negyedik egyben utols eleme a 8. A vektor elemei
kiratskor szkzkkel elvlasztva jelennek meg a konzolban.
Karakteres vektort hasonlan hozhatunk ltre:
> v2<-c("ers", 'kzepes', "gyenge")
> v2
[1] "ers"
"kzepes" "gyenge"
22
A v1, v2 , v3 objektum egy-egy plda az R klnbz tpus vektoraira. Egy vektor tpust a
typeof() fggvnnyel krdezhetjk le:
> typeof(v1); typeof(v2); typeof(v3)
[1] "double"
[1] "character"
[1] "logical"
A v1 objektum double tpusa a numerikus tpusok egyik vltozata (nem egsz rtkeket is
trolhatunk benne), a v2 karakteres s a v3 logikai tpusa pedig a fenti pldbl knnyen
kiolvashat.
Az objektumok fontos jellemzje az objektum hossza, ami vektorok esetn a vektort alkot
elemek szmt jelenti. Ezt a length() fggvnnyel krdezhetjk le.
> length(v1); length(v2); length(v3)
[1] 4
[1] 3
[1] 3
A vektorok esetben a homogenits kzponti szerepet jtszik. Az R abban az esetben sem fog
klnbz tpus elemekbl vektort ltrehozni, ha ezeket egyetlen c() fggvnyhvsban
szerepeltetjk. Ekkor automatikus tpuskonverzi trtnik. Nzzk ezeknek az eseteit:
> eset1<-c(2,4,"6",8)
> eset1
[1] "2" "4" "6" "8"
> eset2<-c(T, FALSE,"6")
> eset2
[1] "TRUE" "FALSE" "6"
> eset3<-c(T, FALSE, 3)
> eset3
[1] 1 0 3
Amennyiben karakteres konstans szerepel az elemek kztt a vektor karakteres tpus lesz.
Ha numerikus s logikai rtket sorolunk fel, akkor a vektor numerikus lesz, azzal a
kiegsztssel, hogy a TRUE logikai rtk 1-re a FALSE pedig 0-ra konvertldik.
Tovbbi lehetsg a c() fggvny hasznlata sorn, hogy a paramterben vektort
szerepeltessnk. Ekkor ezek az elemek is szerepelni fognak az eredmnyvektorban:
23
9 10
9 10
> 10:1
[1] 10
> -1.5:5
[1] -1.5 -0.5
0.5
1.5
2.5
3.5
4.5
9 10
24
Tetszleges tpus vektor ltrehozsra hasznlhatjuk a rep() fggvnyt, amely egy ltez
vektor rtkeit ismtli meg.
> rep(2, times=3)
[1] 2 2 2
> rep(c(2, 0, -2), times=3)
[1] 2 0 -2 2 0 -2 2 0 -2
> rep("t", times=3)
[1] "t" "t" "t"
> rep(c(F,T,T), times=3)
[1] FALSE TRUE TRUE FALSE
TRUE
TRUE FALSE
TRUE
TRUE
A fenti pldban mindenhol hromszor ismteltk meg az els paramtert, mghozz gy,
hogy az R egyms utn sorolta fel ket.
Egy meglv vektor ismtlsnek van egy msik esete is, amikor az elemeit sorban egyenknt
vve vgezzk el az ismtlst. Ekkor nem a times paramtert, hanem az each argumentumot
kell hasznlnunk a fggvny hvsnl.
> rep(2, each=3)
[1] 2 2 2
> rep(c(2, 0, -2), each=3)
[1] 2 2 2 0 0 0 -2 -2 -2
> rep("t", each=3)
[1] "t" "t" "t"
> rep(c(F,T,T), each=3)
[1] FALSE FALSE FALSE TRUE
TRUE
TRUE
TRUE
TRUE
TRUE
Ltjuk, hogy egy elem vektorok ismtlse esetn nincs klnbsg a times s az each
paramterek hasznlata kztt.
Utols esetknt vegyk azt az esetet, amikor elemenknt szeretnnk ismtelni, de mindegyiket
esetleg eltr mrtkben. Ekkor az each paramterben a bemen vektor elemszmval
azonos hossz vektort kell megadni. Ez a vektor tartalmazza az egyes elemek ismtlsi
szmt.
> rep(c(2,3,4), c(1,2,3))
[1] 2 3 3 4 4 4
> rep(c("t","part"), c(2,3))
[1] "t"
"t"
"part" "part" "part"
> rep(c(T,F,T), c(2,3,4))
[1] TRUE TRUE FALSE FALSE FALSE
TRUE
25
TRUE
TRUE
TRUE
A fenti mveletek kzl a hatvnyozs vgrehajtsa tnhet kicsit szokatlannak, itt ugyanis
egy 3 elem vektort, mint alapot egy 3 elem msik vektorra, mint kitevre emeljk. Ha
azonban a komponensenknti vgrehajts szablyt szben tartjuk, akkor vilgos, hogy az
eredmnyvektor az 12, 23 s a 34 eredmnye.
A komponensenknti vgrehajts szablya logikai opertorokra is rvnyes:
> !c(T,T,F,F)
[1] FALSE FALSE
TRUE
TRUE
26
A fenti pldban egy 2 elem s egy 1 elem vektort adunk ssze. A rvidebb vektort mg
egyszer megismtelve mr az (5, 5) vektort kapjuk, gy a kijellt sszeads minden
fennakads nlkl vgrehajthat. Az eredmnyvektor az 1+5 s a 2+5 sszeadsok eredmnye
lesz.
> c(1,2)+c(3,4,5)
[1] 4 6 6
Warning message:
In c(1, 2) + c(3, 4, 5) :
longer object length is not a multiple of shorter object length
Itt egy 2 elem s egy 3 elem vektort adunk ssze. A rvidebbik vektort mg egyszer
megismtelve nem hasznljuk fel annak minden elemt, gy egy figyelmezet zenetet
kapunk. Az eredmnyvektor az 1+3, 2+4 s a 1+5 sszeadsok eredmnye. A kvetkez
pldban mr nincs figyelmeztets:
> c(1,2)+c(3,4,5,6)
[1] 4 6 6 8
Lers
Plda
Plda rtke
max(x)
max(1:10)
10
min(x)
az x vektor legnagyobb
eleme
az x vektor legkisebb eleme
min(11:20)
11
sum(x)
x elemeinek sszege
sum(1:5)
15
prod(x)
x elemeinek szorzata
prod(1:5)
120
mean(x)
x szmtani kzepe
(mintatlag)
mean(1:10)
5.5
median(x)
x medinja
median(1:10)
5.5
27
range(x)
x legkisebb s legnagyobb
eleme
range(1:10)
1 10
sd(x)
az x tapasztalati szrsa
sd(1:10)
3.027650
var(x)
az x tapasztalati variancija
var(1:10)
9.166667
cor(x,y)
korrelci x s y kztt
cor(1:10,11:20)
Hinyz rtkeket is tartalmaz vektor esetn nhny fggvny meglep eredmnyt adhat, pl:
> mean(c(1:10,NA))
[1] NA
Ha kvncsiak vagyunk az NA rtken kvli elemek tlagra, akkor egy msodik paramtert is
szerepeltetnnk kell a mean() fggvnyben:
> mean(c(1:10,NA), na.rm=T)
[1] 5.5
Az na.rm argumentum TRUE rtke biztostja, hogy az tlag szmtsa sorn a hinyz
rtkeket figyelmen kvl hagyjuk.
28
Egy kifejezs vges vagy vgtelen voltt az is.finite() vagy is.infinite() fggvnyekkel
tesztelhetjk. A NaN rtkre az is.nan() fggvnnyel krdezhetnk r. rdekes megfigyelni,
hogy a NaN rtkre mind az is.nan() mind az is.na() fggvny igazat ad:
> x<-c(1, 2, NA, NaN, Inf, -Inf)
> is.na(x); is.nan(x); is.infinite(x); is.finite(x)
[1] FALSE FALSE TRUE TRUE FALSE FALSE
[1] FALSE FALSE FALSE TRUE FALSE FALSE
[1] FALSE FALSE FALSE FALSE TRUE TRUE
[1] TRUE TRUE FALSE FALSE FALSE FALSE
29
"j"
"jeles"
A names attribtum egy karakteres vektor, a hozzrendels utn pl. az R egy kiratsban is
felhasznlja ezeket a cmkket. Tovbbi lehetsgek az attribtumok meghatrozsra az
attributes() s az attr() fggvnnyek. Az
> attributes(x)
$names
[1] "elgtelen" "elgsges" "kzepes"
"j"
"jeles"
parancs az sszes attribtumot (az elsdlegeseket nem) kirja a kpernyre, de ezt a fggvnyt
hasznlva tudjuk az sszes attribtumot trlni is (az elsdlegeseket nem trlhetjk):
> attributes(x)<-NULL
> attributes(x)
NULL
9 10 11
Sokszor van szksg azonban arra is, hogy a vektor egyes elemeit kln tudjuk elrni,
lekrdezni vagy mdostani. A vektor egy tetszleges rszt, egy vagy tbb elemt az
indexels mvelettel rhetjk el. Az index opertor a szgletes zrjel ([]), amit a vektor utn
kell rnunk. Az index opertorban numerikus, karakteres s logikai vektorok is
szerepelhetnek. Nzzk ezeket sorban.
Ha ltrehozunk egy 10 elem x vektort a
> x<-11:20; x
[1] 11 12 13 14 15 16 17 18 19 20
paranccsal, akkor megfigyelhetjk, hogy az x vektor els eleme 11, a msodik 12, az utols,
a tizedik pedig ppen 20. Ebben a felsorolsban az elemek sorszmai (els, msodik, tizedik)
pontosan a vektor indexeit jelentik. A vektor indexelse teht 1-el kezddik, ez az els elem
indexe, a msodik elem indexe 2, az utols elem pedig 10.
Ha az index opertorba egy ilyen egyszer sorszmot runk, akkor a vektor adott index
elemt rhetjk el:
> x[1]
[1] 11
> x[2]
[1] 12
> x[10]
[1] 20
30
14
15
16
17
18
19
20
Itt elszr a msodik elemet 100-ra cserljk, majd a harmadikat a msodik ktszeresre. A
vltozst ltjuk a kpernyn. Ha az x vektort az elemszmnl nagyobb indexszel prbljuk
elrni, akkor NA rtket kapunk:
> x[11]
[1] NA
Ha negatv skalr rtkkel indexelnk, akkor a negatv eljellel megadott sorszmon kvl az
sszes tbbi elemet elrhetjk:
> x<-11:20; x[-3]
[1] 11 12 14 15 16 17 18 19 20
> x[-5]<-0; x
[1] 0 0 0 0 15
Vektorokat azonban nem csak numerikus skalrral, hanem kt vagy tbb elem numerikus
vektorokkal is indexelhetnk. Ebben az esetben az indexben felsorolt sorszmoknak
megfelel index elemeket rhetjk el:
> x<-11:20
> x[c(1,3,5)]; x[3:6]
[1] 11 13 15
[1] 13 14 15 16
> y<-c(3,7); x[y]<-c(100,200); x
[1] 11 12 100 14 15 16 200
18
19
20
Egy vektor indexe mindig egsz szm, de az R megengedi, hogy trt rtkeket
szerepeltessnk az index opertorban, ekkor az egsz rszt veszi az indexeknek (csonkolja
ket):
> x<-11:20; x[2.3]; x[2.8]; x[-2.3]; x[-2.8]
[1] 12
[1] 12
[1] 11 13 14 15 16 17 18 19 20
[1] 11 13 14 15 16 17 18 19 20
31
ahol a (0, 1, 2) rtkek elfordulsi gyakorisgait a (18, 12, 20) elemeket tartalmaz
vektorban rgztjk. Az elemek nevei most is karakteres konstansok, az automatikus
konverzirl az R gondoskodik:
> names(x)
[1] "0" "1" "2"
Ha a csupa TRUE rtk vektorral indexelnk, akkor az x vektor sszes elemt megkapjuk, ha
pedig a csupa FALSE rtkkel, akkor az res vektort kapjuk, az integer(0) az res, egsz
rtkeket tartalmaz vektort jelli.
A logikai index-rtkek lehetv teszik a vektor szrst is, bizonyos feltteleknek eleget tev
rtkek levlogatst. Tekintsk ehhez az x vektort:
32
A which() fggvny bemen paramterknt egy logikai vektort vr, visszatrsi rtke pedig
a TRUE logikai rtkek indexe lesz. Lthat, hogy az
> x<5
[1] TRUE FALSE FALSE
TRUE FALSE
logikai vektor az 1. s 4. pozciban tartalmaz logikai igaz rtket. Ha teht egy adott
felttelnek eleget tev vektorelemek indexre vagyunk kvncsiak, a which() fggvnyt
hasznlhatjuk. Ha a felttelnek eleget tev vektor elemeit is el akarjuk rni, akkor vagy a
which() ltal szolgltatott numerikus rtkekkel,
> x[which(x<5)]
[1] 4 2
33
fggvnnyel, amely a bementi vektor elemit fordtott sorrendben sorolja fel, szintn elrhetjk
a cskken rendezettsget.
Ha a sort() fggvnnyel trendezett vektort a tovbbiakban fel szeretnnk hasznlni, akkor
azt egy jabb objektumban troljuk. Rossz gyakorlat, ha fellrjuk a kiindul vektorunkat.
A vektor rendezsnek msik mdja az order() fggvnyhez kapcsoldik. A visszatrsi
rtk ekkor egy numerikus indexvektor, amellyel a bemen vektort indexelve rendezett
vektort kapunk.
> x<-c(1:5,5:3); order(x)
[1] 1 2 3 8 4 7 5 6
> x[order(x)]; x[order(x, decreasing=T)];
[1] 1 2 3 3 4 4 5 5
[1] 5 5 4 4 3 3 2 1
"E"
"R"
"e"
"r"
"F"
"S"
"f"
"s"
"G"
"T"
"g"
"t"
"H"
"U"
"h"
"u"
"I"
"V"
"i"
"v"
"J"
"W"
"j"
"w"
"K"
"X"
"k"
"x"
"L"
"Y"
"l"
"y"
"M"
"Z"
"m"
"z"
"April"
"August"
"December"
3.2. Faktorok
A faktor a vektorhoz nagyon hasonl, homogn, egydimenzis adatszerkezet, amelyet
elssorban kategorikus vltozk rtkeinek trolsra hasznlunk. Faktorok esetben csak
numerikus s karakteres adattpusokat hasznlhatunk.
Numerikus vagy karakteres vektorbl a factor() fggvny segtsgvel hozhatunk ltre
faktort. A faktor az alaprtelmezett attribtumokon kvl egy levels attribtumot is tartalmaz,
amely a faktor klnbz rtkeit (szintjeit) sorolja fel. A faktorok class attribtumnak
rtke pedig factor.
> x<-c(rep("A",3), rep("B",4), rep("C",3)); x
34
A fenti pldban hrom lehetsges rtket tartalmaz faktort hoztunk ltre, amelyek a
levels() fggvnnyel lekrdezhetk s trhatk:
> levels(xf)
[1] "A" "B" "C"
> levels(xf)<-c(0:2); xf
[1] 0 0 0 1 1 1 1 2 2 2
Levels: 0 1 2
> levels(xf)
[1] "0" "1" "2"
<NA> 3
35
Ahogy ltjuk a fenti pldban, akr az NA rtket is bevonhatjuk a faktor szintjeibe, akr ms
rtkeket is kizrhatunk.
Faktorokat a gl() fggvnnyel is ltrehozhatunk (generate levels), ahol a szintek szmt s
az ismtlsek szmt kell megadnunk.
> gl(3,2)
[1] 1 1 2 2 3 3
Levels: 1 2 3
gyenge
gyenge
[,1] [,2]
1
3
2
4
, , 2
[1,]
[2,]
[,1] [,2]
5
7
6
8
36
Itt az nrow paramter segtsgvel irnytjuk az R-t, hogy a sorok s az oszlopok szmt
meghatrozhassa. A matrix() fggvnyben az ncol paramter is hasznlhat. Lthatjuk,
hogy a 20 elem vektorbl az oszlopok mentn hoztuk ltre a mtrixot. Ha sorfolytonosan
szeretnnk a bemen vektor elemeibl mtrixot kpezni, akkor a byrow paramtert igazra
kell lltanunk:
> matrix(1:12,ncol=4,byrow=T)
[,1] [,2] [,3] [,4]
[1,]
1
2
3
4
[2,]
5
6
7
8
[3,]
9
10
11
12
Mtrixok ltrehozshoz teht egy adott elemszm vektor szksges, de elfordul, hogy a
vektor elemeit ismtelni kell:
> matrix(3:5, nrow=2, ncol=3)
[,1] [,2] [,3]
[1,]
3
5
4
[2,]
4
3
5
> matrix(0, nrow=2, ncol=3)
[,1] [,2] [,3]
[1,]
0
0
0
[2,]
0
0
0
37
A tmbk indexelse nagyon hasonl a vektorok indexelsre, itt is a szgletes zrjel ([])
opertort kell hasznlnunk a tmb egyes elemeinek elrsre. Az egyetlen klnbsg, hogy
mivel itt a dimenzik szma nagyobb mint egy, az egyes dimenziknak megfelelen, tbb
indexeket kell megadnunk s ezeket vesszvel vlasztjuk el az indexopertoron bell. Teht
ha x pldul 3 dimenzis, akkor az x[1,3,2] egy lehetsges plda indexelsre, ahol az els
sor, harmadik oszlopban lv elemre gondolunk, a msodik laprl. A kt dimenzis mtrixok
esetn csak a sor s oszlop azonost indexre van szksgnk (pl. x[2,3]), 4 vagy afeletti
dimenziszmok esetn termszetesen 4 vagy tbb, vesszvel elvlasztott indexre.
Az egyes dimenzipozcikban szerepl indexekre ugyanazok a szablyok rvnyesek, mint a
vektorokra. Hasznlhatunk pozitv vagy negatv numerikus skalrokat s vektorokat, de a
karakteres s logikai vektorokkal val indexels is megengedett. Ha egy dimenzipozcit
resen hagyunk, az tovbbra is az sszes elemet jelenti abbl a dimenzibl:
> x<-matrix(1:10,nrow=2, ncol=5,byrow=T); x
[,1] [,2] [,3] [,4] [,5]
[1,]
1
2
3
4
5
[2,]
6
7
8
9
10
> x[2,3]
[1] 8
> x[2,c(1,4)]
[1] 6 9
> x[,c(1,4)]
[,1] [,2]
[1,]
1
4
[2,]
6
9
> x[,-c(1,4)]
[,1] [,2] [,3]
[1,]
2
3
5
[2,]
7
8
10
x[2,c(1,4), drop=F]
[,1] [,2]
[1,]
6
9
>
x[2,, drop=F]
[,1] [,2] [,3] [,4] [,5]
[1,]
6
7
8
9
10
>
x[,3, drop=F]
[,1]
38
3
8
Amennyiben egy mtrixnak (vagy egy tetszleges tmbnek) az egyes dimenzi rtkeit
elnevezzk, akkor az R megjelentskor is hasznlja ket, st az indexels sorn is
felhasznlhatjuk:
> x["eset1","sz.2"]
[1] 2
> x["eset1",2]
[1] 2
> x["eset2",]
sz.1 sz.2 sz.3 sz.4 sz.5
6
7
8
9
10
> x["eset1", c(T,F)]
sz.1 sz.3 sz.5
1
3
5
39
2
0
0
6
8
9
Lehetsg van a mtrix oszlopait gy sszegezni, hogy az egyes sorokat csoportokba soroljuk
s az sszegzst a csoportokon bell hajtjuk vgre. Ha pldul az
> x<-matrix(1:12,nrow=4, ncol=3); x
[,1] [,2] [,3]
[1,]
1
5
9
[2,]
2
6
10
[3,]
3
7
11
[4,]
4
8
12
mtrix els kt sora ill. a msodik kt sora kpez egy-egy csoportot, akkor ezt a sorok
szmval megegyez elemszm vektor ltrehozsval jelezhetjk a kvetkez mdon:
> csoportok<-c("A","A","B","B")
40
pedig minden oszlop maximumt szolgltatja. Ahhoz azonban, hogy az eredeti clunkat
elrjk, nevezetesen, az oszlopok sszegt vegyk, gy, hogy az els kt sor s a msodik kt
sor kln csoportba tartozik, mg a tapply() msodik paramterben jabb csoportost
vektort kell megadnunk. Ezt a vektort a list() fggvnnyel fzzk a col(x) csoportost
vektor el, hisz ez a sorokra fog vonatkozni. A tapply() msodik paramtere teht
csoportost vektorokat tartalmaz lista, amelynek az elemeit faktorokra konvertlja az R,
mieltt felhasznlja ket.
> cs.matrix<-matrix(c("A","A","B","B"), nrow=4, ncol=3); cs.matrix
[,1] [,2] [,3]
[1,] "A" "A" "A"
[2,] "A" "A" "A"
[3,] "B" "B" "B"
[4,] "B" "B" "B"
> tapply(x, list(cs.matrix,col(x)), sum)
41
A fenti pldban a sorok csoportostsa miatt hoztuk ltre a cs.matrix mtrixot. Egyszerbb
azonban ha helyette a csoportok vektort hasznljuk fel, mghozz egy mtrixszal indexelt
alakjt:
> csoportok[row(x)]
[1] "A" "A" "B" "B" "A" "A" "B" "B" "A" "A" "B" "B"
42
Vektor paramterek esetn, a felsorolt vektorok fogjk alkotni az j mtrix oszlopait (cbind()
esetn), ill. sorait (rbind() esetn), a rvidebb vektor, ha van ilyen, ismtldni fog.
j oszloppal vagy j sorral is kiegszthetjk a mtrixunkat:
>
x<-matrix(1:12,nrow=4, ncol=3); x
[,1] [,2] [,3]
[1,]
1
5
9
[2,]
2
6
10
[3,]
3
7
11
[4,]
4
8
12
> cbind(-3:0,x,13:16)
[,1] [,2] [,3] [,4] [,5]
[1,]
-3
1
5
9
13
[2,]
-2
2
6
10
14
[3,]
-1
3
7
11
15
[4,]
0
4
8
12
16
> rbind(-1,x,1)
[,1] [,2] [,3]
[1,]
-1
-1
-1
[2,]
1
5
9
[3,]
2
6
10
[4,]
3
7
11
[5,]
4
8
12
[6,]
1
1
1
43
-1
4
-1
8
-1
12
# oszlopcsere
> rbind(x[c(3,2,4,1),])
[,1] [,2] [,3]
[1,]
3
7
11
[2,]
2
6
10
[3,]
4
8
12
[4,]
1
5
9
# sorcsere
> cbind(x[,c(1,3)])
[,1] [,2]
[1,]
1
9
[2,]
2
10
[3,]
3
11
[4,]
4
12
# a 2. oszlop trlse
> rbind(x[c(1,3),])
[,1] [,2] [,3]
[1,]
1
5
9
[2,]
3
7
11
# az 2. s a 4. sor trlse
3.5 Listk
Az eddig megismert vektor, faktor, mtrix s tmb adatszerkezet mindegyike homogn, csak
azonos tpus rtkeket trolhatunk el bennk. A lista adatszerkezetben egyms utn tbbfajta
adatot is felsorolhatunk, sem azok tpusra, sem azok mretre nincs megszorts. A list()
fggvnnyel hozhatunk ltre legegyszerbben listkat, melyben vesszvel elvlasztva kell
megadnunk a lista elemeit:
44
A fenti pldban x egy 3 elem lista, az els eleme egy 10 elem numerikus vektor, a
msodik eleme egy 2 elem karakteres vektor, a harmadik eleme pedig egy 1 elem logikai
vektor. A harmadik elemnek a c nevet adtuk, ezt mindegyik listaelem esetn megtehettk
volna. Ha a lista rtkt megjelentjk a kpernyn, akkor a listaelemek egyms alatt jelennek
meg. Az els kt esetben a ketts szgletes zrjelben ([[]]) lv sorszm azonostja a lista
elemeit, a harmadik esetben pedig a listaelem ltalunk megadott neve a $ utn.
A listaelemek nevt az x lista names attribtuma tartalmazza, segtsgvel a tbbi elemnek is
adhatunk rtket:
> names(x)
[1] "" ""
"c"
> names(x)[c(1,2)]<-c("a","b")
> names(x)
[1] "a" "b" "c"
> x
$a
[1]
9 10
$b
[1] "A" "B"
$c
[1] TRUE
9 10
9 10
> x[c(2,3)]
$b
[1] "A" "B"
$c
[1] TRUE
> x["a"]
$a
[1] 1 2
> x[c(T,F,T)]
$a
45
9 10
$c
[1] TRUE
A [ opertorral kapott eredmny minden esetben lista, mg akkor is, ha egyetlen elemt
rjk el az x listnak. Nagyon fontos ettl megklnbztetni a [[ opertor eredmnyt,
amely a lista valamelyik elemvel, annak az rtkvel tr vissza. Itt nincs md tbb listaelem
elrsre sem, szoks szerint numerikus vagy karakteres rtkkel indexelhetnk.
> x[[1]]
[1] 1 2
9 10
> x[["b"]]
[1] "A" "B"
> x[[3]]
[1] TRUE
9 10
> x$b
[1] "A" "B"
> x$c
[1] TRUE
46
Az lapply() a bemen lista elemszmval egyez mret listval tr vissza, melynek rtkei
a msodik paramterben szerepl fggvny visszatrsi rtkei. Az sapply() hasonlan jr
el, de a visszatrsi rtke egy vektor.
47
$class
[1] "data.frame"
48
Z
1
2
5
6
&
Y
6
7
3.5 Idsorok
[]
49
2.0 14.0
3.5
4.9
3.0
50
A fenti pldban a sep paramter rtke (\n) biztostja, hogy a vektor elemeit a sor vge
karakter s ne a szkz vlassza el.
A numerikus s karakteres adatokon kvl logikai s binris adatok beolvassa is lehetsges a
scan() fggvnnyel, st, egy lista elemeit is beolvashatjuk:
> x<-scan(what=list(nev="",kor=0,suly=0))
1: a 33 72
2: b 42 81
3: c 39 78
4:
Read 3 records
> x
$nev
[1] "a" "b" "c"
$kor
[1] 33 42 39
$suly
[1] 72 81 78
> as.data.frame(x)
nev kor suly
1
a 33
72
2
b 42
81
3
c 39
78
Az elemi adattpusok mellett a fenti pldban hasznlt lista is lehet a what paramter rtke,
ekkor minden listaelem tpust a szoksos elemi adattpus jelzsvel kell megadnunk. Ltjuk,
hogy adattblkat is megadhatunk ezzel a mdszerrel.
Vgasztalon lv informcit kzvetlenl a readClipboard() fggvny segtsgvel is
objektumhoz rendelhetnk. Tipikusan karakteres konstansok ltrehozsra hasznljuk
Windows krnyezetben:
x<-readClipboard()
51
A fenti sor egy els sorban oszlopneveket tartalmaz szveges llomny tartalmt helyezi el
a d adattblban. Az llomnyban az adatokat (s az oszlopneveket is) a pontosvessz (;)
vlasztja el, a numerikus rtkekben pedig vesszt hasznlunk a tizedesvessz jellsre.
A paramterekben lert feltteleknek megfelel szveges llomnyt egy egyszer
szvegszerkesztvel is ltrehozhatjuk, de sokszor egyszerbb tblzatkezelt hasznlni, s az
abban elkszlt, tblzatos formban lv adatokat megfelel formtumban exportlni. (Pl.
magyar Excel esetn vlaszthatjuk a CSV (pontosvesszvel tagolt) formtumot).
A read.table() fggvny helyett hasznlhatjuk a read.csv() s read.csv2() fggvnyeket
is, amelyek csak a paramterek alaprtelmezett rtkeiben trnek el az alapfggvnytl.
Ezekben a fggvnyekben a header alaprtelmezetten TRUE, az elvlaszt karakter pedig a
vessz (csv) ill. a pontosvessz (csv2), valamint a tizedesvessz alakja a pont (csv) ill. a
vessz (csv2). Ha tabultorral tagolt llomnyt szeretnnk beolvasni, akkor a read.delim()
ill. a read.delim2() fggvnyeket rdemes hasznlni, mert az elvlaszt karakter itt
alaprtelmezs szerint a tabultor karaktert (\t).
tartalmaz, a sep paramter pedig az els sorban hasznlt elvlaszt karaktert jelli. A sep
paramterre csak akkor van szksg, ha oszlopneveket tartalmaz sort is be akarunk olvasni.
Lthatjuk, hogy a fggvny ltal visszaadott adattbla 2 sort s 3 oszlopot tartalmaz.
fggvnyhvs utn lesznek elrhetek, s segtsgkkel tbbek kztt SPSS, SAS, Minitab,
S-PLUS, Stata s Systat llomnyokat is beolvashatunk. Az sszes elrhet fggvny listjt
a
> ls("package:foreign")
[1] "data.restore" "lookup.xport"
[5] "read.dta"
"read.epiinfo"
[9] "read.S"
"read.spss"
[13] "read.xport"
"write.arff"
[17] "write.foreign"
"read.arff"
"read.mtp"
"read.ssd"
"write.dbf"
"read.dbf"
"read.octave"
"read.systat"
"write.dta"
53
A pldban az x vektor rtkei jelennek meg a kpernyn, majd egy sortrs karakter. Az
adatokat a tabultor jel vlasztja el.
54
5. Adattblk kezelse
Az adatkezels szempontjbl legfontosabb R objektum az adattbla (dataframe). Mint
korbban lttuk, a mtrixhoz hasonlan sorokat s oszlopokat tartalmaz, illetve a listhoz
hasonlan elemekbl, mghozz azonos hosszsg oszlopvektorokbl, pl fel. Az adattbla
ketts eredete jelentsen megknnyti az ilyen adatok kezelst.
Az adattbla sorai egyedekre (szemlyek, trgyak, dolgok, stb.) vonatkoz
megfigyelsek, az oszlopok pedig a megfigyelt tulajdonsgok. A statisztikban gy
mondannk, hogy az adattblban az adatmtrixunkat/tbbdimenzis mintnkat rgzthetjk,
a sorok a mintaelemek, az oszlopok a megfigyelt vltozk.
Az adattbla inhomogn adatszerkezet, oszlopai klnbz tpus adatokat is
tartalmazhatnak. Jellemzen kvalitatv (nominlis s ordinlis skln mrt) adatok trolsra a
faktort hasznljuk, kvantitatv (intervallum s arnyskln mrt) adatok trolsra a
numerikus vektort. Termszetesen adattblban karakteres s logikai vektorok is
szerepelhetnek, st dtumokat s idpontokat is kezelhetnk az adattblban.
Az adatok adattblba szervezsnl vezrl elv, hogy az azonos vltozhoz tartoz
adatrtkek kerljenek azonos oszlopba. Tekintsnk egy egyszer ksrletet, ahol arra
keressk a vlaszt, hogy a tpllkozs mdja befolysolja-e a vr alvadsi idejt.
Vletlenszeren kivlasztunk 24 llatot az egyes ditkhoz (A, B, C, D) s adatainkat papron
a kvetkezkppen rendezzk:
A
62
63
68
56
60
67
66
62
63
71
71
60
59
64
67
61
65
68
63
66
68
64
63
59
Az egyes numerikus rtkek msodpercben mrt vralvadsi idket jelentenek. Ahhoz, hogy
helyesen hozhassuk ltre az adattblnkat, a kvetkezkppen kell talaktani a fenti
tblzatot.
A
62
60
63
59
63
67
55
71
64
65
66
68
66
71
67
68
68
56
62
60
61
63
64
63
59
# mdostja d-t
# d vltozatlan, a mdostsok d.uj-ba kerlnek
56
vagy oszlopt:
> mtcars[,8]
[1] 0 0 1 1 0 1 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 0
[28] 1 0 0 0 1
> mtcars$am
[1] 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1
[28] 1 1 1 1 1
57
disp
440.0
351.0
275.8
167.6
120.3
258.0
400.0
78.7
146.7
140.8
hp
230
264
180
123
91
110
175
66
62
95
drat
3.23
4.22
3.07
3.92
4.43
3.08
3.08
4.08
3.69
3.92
wt
5.345
3.170
3.780
3.440
2.140
3.215
3.845
2.200
3.190
3.150
58
d
qsec vs am gear carb
18.9 1 0
4
4
17.6 0 0
3
3
18.9 1 0
4
4
17.4 0 0
3
3
TRUE FALSE
> d[duplicated(d),]
mpg cyl disp hp drat
wt qsec vs am gear carb
Merc 280C.1 17.8
6 167.6 123 3.92 3.44 18.9 1 0
4
4
59
60
# j adattbla
> rownames(mtcars3)<-mtcars3$name
# sornevek meghatrozsa
> mtcars3<-mtcars3[2:11]
# a felesleges els oszlop trlse
> mtcars3[1:10,]
mpg cyl disp hp drat
wt qsec vs am gear
Mazda RX4
21.0
6 160.0 110 3.90 2.620 16.46 0 1
4
Mazda RX4 Wag
21.0
6 160.0 110 3.90 2.875 17.02 0 1
4
Datsun 710
22.8
4 108.0 93 3.85 2.320 18.61 1 1
4
Hornet 4 Drive
21.4
6 258.0 110 3.08 3.215 19.44 1 0
3
Hornet Sportabout 18.7
8 360.0 175 3.15 3.440 17.02 0 0
3
Valiant
18.1
6 225.0 105 2.76 3.460 20.22 1 0
3
Duster 360
14.3
8 360.0 245 3.21 3.570 15.84 0 0
3
Merc 240D
24.4
4 146.7 62 3.69 3.190 20.00 1 0
4
Merc 230
22.8
4 140.8 95 3.92 3.150 22.90 1 0
4
Merc 280
19.2
6 167.6 123 3.92 3.440 18.30 1 0
4
5.5. Rendezs
A vektorok rendezsnl mr megismertk az order() fggvnyt (3.1.8. fejezet), amelyet
adattblk rendezsre is hasznlhatunk. Az mtcars adattbla sorait a fogyasztsi adatok
(mpg vltoz) alapjn nvekv sorrendbe rendezhetjk, ha a sorok indexelsre az order()
fggvny visszatrsi rtkt hasznljuk:
> order(mtcars$mpg)
[1] 15 16 24 7 17 31 14 23 22 29 12 13 11
[21] 4 32 21 3 9 8 27 26 19 28 18 20
5 10 25 30
hp
205
215
245
245
230
335
180
150
150
264
drat
2.93
3.00
3.73
3.21
3.23
3.54
3.07
3.15
2.76
4.22
wt
5.250
5.424
3.840
3.570
5.345
3.570
3.780
3.435
3.520
3.170
61
wt
3.435
5.250
3.840
5.345
2.320
3.520
3.570
2.770
2.200
1.935
A fenti logikai vekorban pontosan azokban a pozcikban szerepel TRUE rtk, amelyik
sorban fogyszts rtke kisebb mint 15 mrfld/gallon. Ha ezt szerpeltetjk a sorkoordinta
helyn, a kvnt sorokhoz jutunk:
> mtcars[mtcars$mpg<15,]
mpg cyl disp hp drat
wt qsec vs am gear carb
Duster 360
14.3
8 360 245 3.21 3.570 15.84 0 0
3
4
Cadillac Fleetwood 10.4
8 472 205 2.93 5.250 17.98 0 0
3
4
Lincoln Continental 10.4
8 460 215 3.00 5.424 17.82 0 0
3
4
Chrysler Imperial
14.7
8 440 230 3.23 5.345 17.42 0 0
3
4
62
13.3
Tbb vltzn alapul felttel megadshoz sszetett logikai kifejezst kell rnunk:
> mtcars[mtcars$mpg<15 & mtcars$disp>400,]
mpg cyl disp hp drat
wt qsec vs am gear carb
Cadillac Fleetwood 10.4
8 472 205 2.93 5.250 17.98 0 0
3
4
Lincoln Continental 10.4
8 460 215 3.00 5.424 17.82 0 0
3
4
Chrysler Imperial
14.7
8 440 230 3.23 5.345 17.42 0 0
3
4
drat
wt qsec vs am gear carb
2.93 5.250 17.98 0 0
3
4
3.00 5.424 17.82 0 0
3
4
3.23 5.345 17.42 0 0
3
4
disp
160.0
160.0
108.0
258.0
360.0
225.0
360.0
146.7
140.8
167.6
> na.omit(mtcars)[1:10,]
mpg cyl disp
Mazda RX4
21.0
6 160.0
Datsun 710
22.8
4 108.0
Hornet 4 Drive 21.4
6 258.0
Valiant
18.1
6 225.0
Merc 240D
24.4
4 146.7
Merc 230
22.8
4 140.8
Merc 280
19.2
6 167.6
Merc 280C
17.8
6 167.6
hp
110
93
110
105
62
95
123
123
hp
110
110
93
110
175
105
245
62
95
123
drat
3.90
3.90
3.85
3.08
3.15
2.76
3.21
3.69
3.92
3.92
drat
3.90
3.85
3.08
2.76
3.69
3.92
3.92
3.92
63
wt
2.620
2.875
2.320
3.215
3.440
3.460
3.570
3.190
3.150
3.440
wt
2.620
2.320
3.215
3.460
3.190
3.150
3.440
3.440
16.4
17.3
0
0
0
0
3
3
3
3
Ugyanezt az eredmnyt a transform() fggvny segtsgvel is elrhetjk, ahol a subset()hez hasonlan nmileg egyszerbben hivatkozhatunk az adattbla vltozira. Most alaktsuk
t height vltozt inch-rl cm-re.
> transform(women,magassag=round(height*2.45))
height weight suly magassag
1
58
115
52
142
2
59
117
53
145
3
60
120
54
147
4
61
123
55
149
5
62
126
57
152
64
63
64
65
66
67
68
69
70
71
72
129
132
135
139
142
146
150
154
159
164
58
59
61
63
64
66
68
69
72
74
154
157
159
162
164
167
169
172
174
176
(4,7]
(4,7]
(4,7]
65
ers
66
6. Grafika az R-ben
Az R szmos eljrst ad a grafikus brk ltrehozsra, st sajt bratpusokat is
ltrehozhatunk. A parancssorba gpelt demo(graphics) vagy demo(persp)
fggvnyhvsokkal kpet kaphatunk az R grafikus lehetsgeirl.
Az R segtsgvel grafikus eszkzre (graphical device) rajzolhatunk, amely alaprtelmezetten
a kperny, de egy adott tpus llomny is lehet. A grafikus (rajz)fggvnyeink kt alapvet
csoportba sorolhatk, az n. magas-szint (high-level) rajzfggvnyek s az alacsony-szint
(low-level) fggvnyek.
67
A fenti sor hatsra egy 3 sorbl s 2 oszlopbl ll, 6 elklnlt ablakot tartalmaz
rajzterletet kapunk. Az mfrow esetn a feloszts soronknt, az mfcol esetn pedig
oszloponknt trtnik.
Az aktulis felosztsrl a layout.show() fggvny ad tjkoztatst:
> par(mfrow=c(3,2)); layout.show(6)
68
A fenti pldban arrl rendelkeznk, hogy a 2. sor 1. oszlopba kerljn a kvetkez bra. A
4 elem numerikus vektor utols kt rtke csak megismtli a feloszts tnyt, miszerint a
rajzterlet 3 sor s 2 oszlop mentn lett felosztva.
A rajzterlet rugalmasabb felosztst teszi lehetv layout() fggvny, amely a
paramterben szerepl mtrix rtkei mentn vgzi a felosztst. A rajzterlet rszei eltr
mretek is lehetnek, valamint gondoskodhatunk az egyms melletti rszek egyestsrl is.
A mfcol paramter hasznlatnl szerepl felosztst a kvetkez layout() fggvnyhvs
hajtja vgre:
> layout(matrix(1:6,ncol=2)); layout.show(6)
A feloszts itt egy 2x2-es mtrix alapjn trtnik, ahol a widths paramter a kt oszlop
szlessgt lltja be: a msodik oszlop az els oszlop szlessgnek ktszerese. A heights
paramter hasonlan hatrozza meg a sorok magassgt.
A layout() fggvny els paramterben szerepl mtrix azonos rtkeket is tartalmazhat,
ekkor egyms melletti rajzterletek sszevonsra van lehetsgnk:
> layout(matrix(c(1:3,3),ncol=2), widths=c(1,2), heights=c(1,2))
> layout.show(3)
A pldban 2 sor s 1 oszlop mentn a rajzterletet egy fels s als rszre osztottuk. Ezek
azonostja a visszatrsi rtknek megfelelen 1 s 2. Az azonostkat felhasznlhatjuk az
adott rajzterlet tovbbosztshoz:
69
A 2-es rajzterletet osztjuk 1 sor s 3 oszlop mentn hrom egyenl rszre, ezek j
azonostival tr vissza a fggvny. A rajzterlet kivlasztst a screen() fggvnnyel
vgezzk, paramterben egy rajzterlet azonostjt kell megadnunk. Rajzterlet tartalmt az
erase.screen() fggvnnyel trlhetjk, a rajzterlet felosztsbl a close.screen()
fggvnnyel lphetnk ki.
6.1. bra
A rajzterletre kerlnek az brzoland pontok, vonalak, grbk, 2 s 3 dimenzis alakzatok.
A bels margn foglal helyet az bra cme s alcme, a tengelyek feliratai, a beosztsok
cmki s maguk a beosztsok is. A rajzterlet s a bels marg hatrn helyezkedik el a kt
tengely, valamint a rajzterletet krbevev szegly is.
A bels margk a mai (inch-ben mrt) s mar (szvegsorokban mrt) paramterek
segtsgvel krdezhetk le s llthatk be.
> par(c("mai", "mar"))
$mai
[1] 0.95625 0.76875 0.76875 0.39375
$mar
[1] 5.1 4.1 4.1 2.1
70
A kapott rtkek rendre az als, bal oldali, fels s jobb oldali margkat jelentik.
A kls margk az omi s az oma paramterek segtsgvel kezelhetk s mint lttuk
alaprtelmezetten nem kerlnek belltsra:
> par(c("omi", "oma"))
$omi
[1] 0 0 0 0
$oma
[1] 0 0 0 0
6.2. bra
A margkban (kls vagy bels) szveges informcit az mtext() fggvnnyel helyezhetnk
el. Az side paramter a marg kivlasztst jelenti (1=als, 2=bal, 3=fels, 4=jobb), a line
paramterrel a marg szvegsort adjuk meg (0-val kezddik), az outer paramter pedig a
kls vagy bels marg kztti vlasztsrl gondoskodik (TRUE=kls marg,
FALSE=bels marg). A kls s bels margba rhatunk a kvetkez parancsokkal:
> mtext("Kls marg", outer=T, line=2)
71
6.3. bra
Amennyiben az eszkzfelletnket tbb ablakra osztjuk az alaprtelmezett felosztsban az
ablakokban egy-egy braterlet tallhat, amelyek bels margval s rajzterlettel
rendelkeznek (6.4. bra).
6.4. bra
72
6.5. bra
Termszetesen a margkba most is rhatunk tetszleges szveget az mtext() fggvny
segtsgvel a 6.6. brnak megfelelen.
6.6. bra
73
6.7. bra
Az x s y numerikus vektorok 10-10 elemek, a 6.7. brn is 10 pontot ltunk. Az els
pontnak megfelel karika a (21, 51) koordintj pontban rajzoldik ki, ezek a koordintk
az x s y vektor els elemei. A msodik kis karika rajzolshoz a numerikus vektorok 2.
elemeit hasznlja a plot(), ez a (22, 52) koordintj pont lesz. A tbbi 8 pont is hasonlan,
az azonos pozcin lv vektorelemeknek megfelel rtkprok alapjn jelenik meg az brn.
A plot() fggvny egyetlen vektorral is hvhat:
> x<-21:30
74
6.8 bra
A 6.8. brn a plot() fggvny a bemeneti x vektor alapjn jelent meg 10 pontot. A pontok
megjelentshez szksges kt koordinta kzl most csak az egyik az y koordinta ll
rendelkezsre, ezt ppen az x vektor elemei alkotjk. Az x koordintk az x vektor indexeibl
llnak, amely egy 10 elem vektor esetn az 1,2, ,10 elemeket jelenti. Az els brzolt pont
koordinti ennek megfelelen az (1, 21), a msodik (2, 22) s gy tovbb, az utols (10, 30).
A plot() fggvny paramterben a numerikus vektorok helyett faktorok is szerepelhetnek.
Ha egyetlen faktorral hvjuk, akkor oszlopdiagramot kapunk, ha faktorral s numerikus
vektorral, akkor dobozdiagramot kapunk. Ezeket az eseteket foglalja ssze a 6.9. bra.
>
>
>
>
>
>
+
>
>
+
layout(matrix(1:4,ncol=2, byrow=T))
x<-rnorm(10)
y<-rnorm(10)
f<-gl(2,3,10)
plot(x, main="Egy vltoz", xlab="Az x vektor indexei")
plot(f, main="Egy vltoz", sub="Kategorikus vltoz",
las=1, col="red", pch=16, , ylim=c(0, 8))
plot(cbind(x,y), main="Kt vltoz", ylim=c(-3,3), bty="l")
plot(y~f, main="Kt vltoz", xlab="Kategrikus vltoz",
ylab="Kvantitatv vltoz", ylim=c(-3,3))
75
6.9. bra
A 6.9. bra megjelentshez a plot() fggvnyekben klnbz paramtereket
hasznlhatunk. Nzzk a legfontosabbakat sorban:
main
sub
xlab, ylab
axes
bty
"c",
"u",
"]"
76
fg, bg,
col,
col.axis,
col.lab,
col.main,
col.sub
las
pch
merlegesek a tengelykre
lty
cex,
cex.axis,
cex.lab,
cex.main,
cex.sub
family,
font, font.axis,
font.lab,
font.main,
font.sub
layout(matrix(1:9,ncol=3, byrow=T))
x<-1:10; y<-rpois(10,lambda=5); m<-cbind(x=x,y=y-5)
plot(m,type="p",main='type="p"')
plot(m,type="l",main='type="l"')
plot(m,type="b",main='type="b"')
plot(m,type="c",main='type="c"')
plot(m,type="o",main='type="o"')
plot(m,type="h",main='type="h"')
plot(m,type="s",main='type="s"')
plot(m,type="S",main='type="S"')
plot(m,type="n",main='type="n"')
77
6.10. bra
par(mfrow=c(2,2))
curve(12*x**2+3*x-1, from=-10, to=10)
curve(sin, from=-5, to=5)
curve(sin(x)/x, from=-20, to=20, n=200)
curve(dnorm(x,mean=5,sd=2),from=-1, to=11)
78
6.11. bra
freq
right
79
tartoznak.
>
>
>
>
>
+
>
+
>
+
include.lowest
plot
labels
par(mfrow=c(2,2))
x<-c(1,1,1,2,2,3)
rx<-rpois(120, lambda=5)
hist(x,ylim=c(0,4),labels=T)
hist(x,breaks=c(.5,1.5,2.5,3.5),right=TRUE,ylim=c(0,4),
labels=T,ylab="gyakorisg")
hist(x,freq=F,breaks=c(.5,1.5,2.5,3.5),right=TRUE,ylim=c(0,.6),
labels=T,ylab="relatv gyakorisg",col=rainbow(12))
hist(rx,freq=F,breaks=seq(0,20,3),ylab="relatv gyakorisg",
col=rainbow(10),main="Hisztogram",ylim=c(0,.2))
80
6.12. bra
par(mfrow=c(2,2))
rx<-rchisq(100,10)
boxplot(rx)
boxplot(rx,range=0)
boxplot(count~spray, data=InsectSprays, col="lightgray")
boxplot(decrease~treatment, data=OrchardSprays, col="bisque")
6.13. bra
81
6.14. bra
par(mfrow=c(2,2))
barplot(c(1:5,5:1),main="Vektor argumentum\nhoriz=F",col=heat.colors(10))
barplot(rpois(12, lambda=5),main="Vektor argumentum\nhoriz=T",
col=heat.colors(12),horiz=T)
m<-matrix(1:12,ncol=3); m
[,1] [,2] [,3]
[1,]
1
5
9
[2,]
2
6
10
[3,]
3
7
11
82
6.15. bra
83
plot(1:10,xlab=expression(x[y]),ylab=expression(x^y), type="n")
mtext("mtext(line= -1,side=3)",line=-1,side=3)
mtext("mtext(line=1,side=3,adj=0.2)",line=1,side=3,adj=0.2)
mtext("mtext(line=0,side=4,adj=1)",line=0,side=4,adj=1)
points(2:7,2:7,pch=3, cex=4,col="red")
text(2,2,"text(2,2)")
text(3,3,"text(6,6,adj=c(0,0))",adj=c(0,0))
text(4,4,"text(4,4,adj=c(1,0))",adj=c(1,0))
text(5,5,"text(5,5,adj=c(0,1))",adj=c(0,1))
text(6,6,"text(6,6,adj=c(1,1))",adj=c(1,1))
text(7,7,"text(7,7,adj=c(0.5,0.5))",adj=c(.5,.5))
6.16. bra
Az x s y tengely feliratban als s fels indexet is hasznlhatunk. Ehhez az expression()
fggvnyt hasznljuk fel, amellyel kifejezseket hozhatunk ltre az R-ben. Als indexek
rsra a szgletes zrjelet (pl. x[y]), fels indexre a hatvnyozs jelt (pl. x^y)
hasznlhatjuk.
A megjelentend szveg bettpust is megvltoztathatjuk a font s a family argumentumok
segtsgvel. A font rtkei: 1=norml, 2=flkvr,3=dlt s 4=flkvr/dlt. A family
argumentum egy betcsald nevt tartalmazhatja, alaprtelmezett rtkei a serif, sans,
mono s symbol lehetnek. A szmtgpen egyb betcsaldok a windowsFonts() s a
windowFont() fggvnyek hasznlata utn lesznek elrhetek az R-ben.
> windowsFonts( font.comic = windowsFont("Comic Sans MS"),
84
font.verdana = windowsFont("Verdana"),
font.trebuchet = windowsFont("Trebuchet MS"),
font.book.antiqua = windowsFont("Book Antiqua"))
plot(1:10,type="n",xlab="",ylab="")
par(cex=1.4)
text(2,8,"serif",family="serif",font=1)
text(2,6,"sans",family="sans",font=2)
text(2,4,"mono",family="mono",font=3)
text(2,2,"symbol",family="symbol",font=4)
text(8,8,"Comic Sans MS",family="font.comic",font=1)
text(8,6,"Verdana",family="font.verdana",font=2)
text(8,4,"Trebuchet MS",family="font.trebuchet",font=3)
text(8,2,"Book Antiqua",family="font.book.antiqua",font=4)
6.17. bra
plot(1:10, type="n")
x<-c(1,2,3,1,2,1,3,2,1,2)
points(1:10,x+7, pch="*",cex=2)
lines(1:10,x+4.4,lty=1)
lines(1:10,x+4, lty=2, lwd=1.5)
lines(1:10,x+3.6,lty=3, lwd=2)
lines(1:10,x+3.2,lty=4, lwd=2.5)
lines(1:10,x+2.8,lty=5, lwd=3)
lines(1:10,x+2.2,lty=6, lwd=3.5)
85
pch=16)
lty=5)
6.18. bra
Egyeneseket az abline() segtsgvel is ltrehozhatunk. Legfontosabb argumentumok az a s
a b, amelyek az y tengellyel val metszspontot s az egyenes meredeksget adjk meg.
Fggleges s vzszintes egyeneseket is rajzolhatunk a v s h paramterek megadsval.
>
>
>
>
>
>
>
>
>
plot(-4:5,-4:5, type="n",xlab="",ylab="")
abline(h=0, v=0, col = "gray60")
text(0.1,0, "abline ( h = 0 )",col="gray60",adj=c(0,-0.1))
text(0,0.1, "abline ( v = 0 )",col="gray60",adj=c(0,-0.1),srt=90)
abline(h = -3:4, v = -3:4, col = "lightgray", lty=3)
abline(a=1, b=2, col="blue")
text(1,3,"abline( 1, 2 )", col="blue",adj=c(-.1,-.1))
abline(a=-2, b=-1, col="blue")
text(1,-3,"abline( -2, -1 )", col="blue",adj=c(-.1,-.1))
86
6.19. bra
plot(100:500,100:500, type="n",xlab="",ylab="")
x<-runif(50)*350
y<-runif(50)*330
rect(100+x, 100+y, 150+x, 170+y, col=rainbow(11,start=.7,end=.1),
border=gray(x/400),lwd=x%%10)
87
6.20. bra
A polygon() fggvny tetszleges egyenesekkel hatrolt skidomok ltrehozsrt felels.
Az x s y paramterben vrja a cscspontok koordintit. A lenti pldban a vonalak
rajzolsra hasznlatos segments() fggvny is bemutatsra kerl, azt lthatjuk, hogy a
polygon() fggvny argumentuma, hogyan feleltethet meg a segments() fggvny
bemen paramternek.
my_segments<-function(x,y) {
i<-1:(length(x)-1)
segments(x[i],y[i],x[i+1],y[i+1])
segments(x[length(x)],y[length(x)],x[1],y[1])
}
plot(-4:5,-4:5, type="n",xlab="",ylab="")
abline(h=0, v=0, col = "gray60")
abline(h = -4:5, v = -4:5, col = "lightgray", lty=3)
x<-c(-4,-1,0)
y<-c(1,2,1)
polygon(x,y,col="gray")
y<-y+2
my_segments(x,y)
x<-c(1,2,3,4)
y<-c(1,2,2,1)
polygon(x,y,col="gray")
y<-y+2
my_segments(x,y)
my_func<-function(x) {
88
6.21. bra
xlab, ylab
Tengelyfeliratok hozzadsa.
line
Az alaprtelmezett szvegpozcit
meghatrozzuk a szvegsor sorszmt.
outer
89
rhatjuk
fell,
ha
rajzterlet szeglyezse
outer
az eszkzfellet szeglyezse
mgp=c(3,1,0)
lab
xaxp, yaxp
xaxs, yaxs
tck,
tcl,
las,
xlim, ylim, log,
xlog, ylog
Korbban mr szerepletek.
at=NULL
labels
90
legend
fill,
pch
lty,
inset=0
merge
horiz=FALSE
ncol=1
text.col, bg
>
>
>
>
op<-par()
par(oma=c(.5,.5,2,.5))
par(mfrow=c(2,2))
x<-rnorm(10)
>
>
>
>
>
>
>
>
>
>
>
plot(x,main="",axes=F,xlab="",ylab="",col=gray(0.7))
text(5.5,0,"Alaprtelmezett",font=2)
title(main="Cm a kls margn",outer=T,line=0.2)
title(main="Cm a bels margn")
title(sub="ALCM")
title(xlab="x",ylab="y")
box("outer",lty=1,col=grey(.2))
box("inner",lty=2,col=grey(.4))
box("figure",lty=3,col=grey(.6))
box("plot",lty=4,col=grey(.8))
axis(1, at=1:10);axis(2)
>
>
>
>
par(xaxs="i")
par(yaxs="i")
par(mgp=c(2,.5,0))
plot(x,main='xaxs="i",yaxs="i",mgp=c(2,.5,0)',axes=F,
+
xlab="axis(1,at=1:10,tcl=.3)",ylab="")
> box("plot",lty=4,col=grey(.8))
> axis(1,at=1:10,tcl=.3)
>
> par(xaxs="r")
> par(yaxs="r")
>
> par(mgp=c(3,1,-.2))
> plot(x,main='xaxs="r",yaxs="r",mgp=c(3,1,.2)',axes=F,xlab="axis(1,at=3:8,labels=LETTERS[1:6])",ylab="")
91
box("plot",lty=4,col=grey(.8))
axis(1,at=3:8,labels=LETTERS[1:6])
axis(2)
axis(4)
par(mgp=c(3,1,0))
par(mar=c(1,1,1,1))
plot(1:10,main="",axes=F,xlab="",ylab="",type="n")
box("figure",lty=3,col=grey(.6))
box("plot",lty=4,col=grey(.8))
legend("topleft",LETTERS[1:3],lw=1:3,inset=.1)
legend("top",LETTERS[1:3],lty=1:3,inset=.1)
legend("topright",LETTERS[1:3],lty=1:3,pch=0:3,inset=.05)
legend("right",LETTERS[1:3],lw=1:3,pch=0:3)
legend("bottomright",LETTERS[1:3],fill=2:4,text.col=2:4)
legend(1,7, as.character(0:25), pch = 0:25,ncol=4,cex=1.2)
par(op)
6.22. bra
92
type
labels
pos=FALSE
plot=TRUE
atpen=FALSE
offset=0.5
93
tolarence=0.25
94
7. Matematika az R-ben
7.1. Eloszlsok
Elre definilt eloszlsok szles krt biztostja szmunkra az R. Mindegyik eloszlshoz ngy
fggvny tartozik, amelyek csak az egy bets eltagban (prefix) klnbznek. A prefixknt
hasznlhat d, p, q s r jelentse a kvetkez:
Fggvny vge
Eloszls paramterei
shape1, shape2
size, prob
location, scale
beta()
binom()
cauchy()
chisq()
exp()
f()
gamma()
geom()
hyper()
logis()
lnorm()
nbinom()
norm()
pois()
signrank()
t()
unif()
weibull()
wilcox()
df
rate
df1, df2
shape
prob
m, n, k
location, scale
meanlog, sdlog
size, prob
mean, sd
lambda
n
df
min, max
shape, scale
m, n
# Elkszts
par(mfrow=c(2,2)); x<-seq(-3,3,0.1); p<-seq(0,1,0.01)
# 1. bra: dnorm()
plot(x,dnorm(x),type="l",main="dnorm()")
polygon(c(x[x<=-1],-1),c(dnorm(x[x<=-1]),dnorm(-3)),col="grey")
text(-2.2,.2,paste("p=",round(pnorm(-1),3),sep=""),adj=c(.5,0))
95
arrows(-2.2,.18,-1.5,.05,length=0.1)
# 2. bra: pnorm()
plot(x,pnorm(x),type="l",main="pnorm()")
arrows(-1,0,-1,pnorm(-1),col="red",length=0.1)
arrows(-1,pnorm(-1),-3,pnorm(-1),col="green",length=0.1)
text(-2,.4,paste("( -1,", round(pnorm(-1),3),")"),adj=c(.5,0))
arrows(-2,.38,-1,pnorm(-1),length=0.1)
# 3. bra: qnorm()
plot(p,qnorm(p),type="l",main="qnorm()")
arrows(pnorm(-1),-3,pnorm(-1),-1,col="red",length=0.1)
arrows(pnorm(-1),-1,0,-1,col="green",length=0.1)
text(.2,1,paste("( ", round(pnorm(-1),3),", -1 )",sep=""),adj=c(.5,0))
arrows(.2,0.8,pnorm(-1),-1,length=0.1)
# 4. bra: rnorm()
plot(rnorm(50),type="h",main="rnorm(50)")
7.1. bra
A dnorm() fggvny alaprtelmezs szerint a standard normlis eloszls
srsgfggvnynek rtkeit szolgltatja. A mean s az sd argumentumokkal tetszleges
paramter normlis eloszlst definilhatunk.
A binomilis eloszlshoz tartoz ngy fggvnyre a 7.2. brn ltunk pldt.
>
>
>
>
+
>
# Elkszts
par(mfrow=c(2,2)); x<-0:10; p<-seq(0,1,0.01)
# 1. bra: dbinom()
barplot(dbinom(x,size=10,prob=.3),main="dbinom(size=10,prob=.3)",
names.arg=0:10,col=c(rep("gray",5),rep("white",5)),ylim=c(0,.3))
text(9,.2,paste("p=",round(pbinom(4,size=10,prob=.3),3),sep=""))
96
# 2. bra: pbinom()
plot(x,pbinom(x,size=10,prob=.3),type="h",main="pbinom()",
axes=F,col=gray(.4))
box(); axis(1,at=0:10); axis(2)
segments(4, pbinom(4,size=10,prob=.3),
-1,pbinom(4,size=10,prob=.3),lty=2,col="red")
text(2,pbinom(4,size=10,prob=.3),
paste("p=",round(pbinom(4,size=10,prob=.3),3),sep=""),
adj=c(.5,-.3))
# 3. bra: qbinom()
plot(p,qbinom(p,size=10,prob=.3),type="s",main="qbinom()")
segments(.85,-1,.85,4,lty=2,col="red")
segments(pbinom(3,size=10,prob=.3),4,-1,4,lty=2,col="red")
# 4. bra: rbinom()
plot(rbinom(25,size=10,prob=.3),type="h",main="rbinom(25)")
7.2. bra
97
Irodalomjegyzk
[1] R <-...erre, erre...! (Bevezets az R-nyelv s krnyezet hasznlatba) (szerz: Solymosi
Norbert)
[2] Crawley, Michael J. The R Book. John Wiley & Sons Ltd, England. 2007.
98
R feladatok
Alapok
Hatrozzuk meg az els szz termszetes szm sszegt!
Hatrozzuk meg a szznl kisebb pratlan termszetes szmok sszegt!
Hatrozzuk meg az els szz pros termszetes szm sszegt!
Hatrozzuk meg az els szz, 3-mal oszthat termszetes szm sszegt!
Hatrozzuk meg a szznl kisebb, 3-mal oszthat termszetes szmok sszegt!
Hatrozzuk meg az els tz ngyzetszm sszegt!
Ksztsnk egy olyan 10 elem vektort, amelynek elemei egy szmtani sorozat
egymst kvet elemei! Legyen az utols elem 120, a szomszdos elemek kztti
tvolsg pedig 3!
8. Ksztsnk egy olyan 10 elem vektort, amelynek elemei egy szmtani sorozat
egymst kvet elemei! Legyen az els elem a hexadecimlis E01, a szomszdos
elemek kztti tvolsg pedig 12!
9. Ksztsnk egy 10 elem vektort, mely a sin i , i=1,,10 rtkeket tartalmazza!
2
(gyeljnk a kerektsre, hasznljuk a round() fggvnyt!)
10. Ksztsnk egy olyan 10 elem vektort, amelynek elemei egy mrtani sorozat egymst
kvet elemei! Legyen az els elem 20, a szomszdos elemek kztti hnyados pedig
3!
11. Hozzunk ltre egy y vektort, mely egy tetszleges x vektor elemeit 2-szer egyms utn
felsorolva tartalmazza!
12. Hozzunk ltre egy y vektort, melynek els s utols eleme legyen 0, valamint a
kzbls rtkek egy tetszleges x vektor elemeit 2-szer egyms utn felsorolva
tartalmazzk!
13. Hozzunk ltre egy y vektort, mely egy tetszleges x vektor elemeit 12-szer egyms
utn felsorolva tartalmazza!
14. Hozzunk ltre egy y vektort, mely egy tetszleges x vektor elemeinek mindegyikt 12szer rendre megismtli!
15. Hozzunk ltre egy y vektort, mely egy tetszleges x vektor els elemt 12-szer
megismtli, az sszes tbbi x elemet pedig 1-szer felsorolva tartalmazza!
16. Tltsk fel 0-val a 10 elem x vektor pros index elemeit!
17. Tltsk fel 0-val a 10 elem x vektor pratlan index elemeit!
18. Tltsk fel 0-val a tetszleges elemszm x vektor pros index elemeit!
19. Hozzunk ltre egy y vektort, mely egy tetszleges x vektor elemeit fordtott
sorrendben tartalmazza!
20. Hozzunk ltre egy y vektort, mely egy tetszleges x vektor elemeinek als felt
tartalmazza! (Pratlan elemszm x esetn az als kisebbik felt. Hasznljuk a
floor() fggvnyt!)
21. Hozzunk ltre egy y vektort, mely egy tetszleges x vektor elemeinek fels felt
tartalmazza! (Pratlan elemszm x esetn a fels nagyobbik felt. Hasznljuk a
ceiling() fggvnyt!)
1.
2.
3.
4.
5.
6.
7.
Egyb adatszerkezetek
1. Ksztsnk egy csupa 0 elemeket tartalmaz, 3 sorbl s 4 oszlopbl ll mtrixot!
2. Ksztsnk egy 3 sorbl s 5 oszlopbl ll mtrixot, amelynek elemei a sor- s
oszlopindexek szorzatait tartalmazza!
99
Megoldsok
Alapok
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
sum(1:100)
[1] 5050
sum(seq(from=1, to=99, by=2))
[1] 2500
sum(seq(from=2, by=2, length.out=100))
[1] 10100
sum(seq(from=3, by=3, length.out=100))
[1] 15150
sum(seq(from=3, to=99, by=3))
[1] 1683
sum((1:10)^2)
[1] 385
seq(to=120, by=3, length.out=10)
[1] 93 96 99 102 105 108 111 114 117 120
seq(from=0xE01, by=12, length.out=10)
[1] 3585 3597 3609 3621 3633 3645 3657 3669 3681 3693
round(sin((pi/2)*(1:10)))
[1] 1 0 -1 0 1 0 -1 0 1 0
20*3^(0:9)
[1]
20
60
180
540
1620
4860 14580
43740 131220 393660
y<-c(x,x)
y<-c(0,x,x,0)
y<-rep(x, times=12)
y<-rep(x, each=12)
y<-rep(x, times=c(12,rep(1,length(x)-1)))
x[(1:5)*2]<-0
x[(0:4)*2+1]<-0
x[c(F,T)]<-0
y<-x[length(x):1]
y<-x[1:floor((length(x)/2))]
y<-x[ceiling((length(x)/2)):length(x)]
Egyb adatszerkezetek
1. m<-matrix(0,nrow=3, ncol=4)
2. m<-matrix(c(1:5,(1:5)*2,(1:5)*3),nrow=3,ncol=5,byrow=T)
100