Kuna enamusel tudengitest on põhiteadmised R keskkonna kasutamisest olemas, siis praktikumides lihtsalt tutvustatakse põgusalt vajalikke käske/R keele vahendeid. Neil tudengeid, kel R varasema kasutamise kogemus kas puudub või on väga vähene, on tungivalt soovitatav võimalikult kiiresti enda algteadmisi täiendada, kasutades selleks näiteks kursuse Moodle kodulehel viidatud materjale. Samuti võib alati küsida abi ja selgitusi nii kaastudengite kui praktikumijuhendaja käest.
Funktsiooni definitsiooni kuju R-s on järgmine
f_nimi <- function(arg1,arg2,...,argn=vaikeväärtus){
käsk1
käsk2
jne
return(tulemus)
}
Näited:
ruut <- function(x){
return(x^2)
}
lineaarne <- function(x,a=7,b=0){
tulemus <- a*x+b
return(tulemus)
}
Harjutus 1. Defineerige funktsioon
lineaarne ning kõigepealt katsuge ära arvata tulemus ja
siis kontrollige seda järgnevate programmilõikude korral
lineaarne(3)
lineaarne(1:5)
lineaarne(1,2)
x <- 3;a <- 2;b <- 1
lineaarne(a,b,x)
lineaarne(a=3,b=2,x=0)
lineaarne(a=a,b=b,x=x)
R-is on programmikoodi töökiiruse huvides hea kasutada tsüklite asemel vektoroperatsioone. Selleks on vaja teada mõningaid võimalusi vektorite tekitamiseks ja kasutamiseks.
x <- 1:10 # Teeb vektori, mis sisaldab väärtuseid 1, 2, 3, …, 10
y <- rep(NA,10) # Teeb 10-elemendi pikkuse vektori, mille elementideks on NA (puuduv väärtus)
z <- c(3,1,2,7,1,5,1,4,2,10) #Tekitab vektori toodud väärtustest
print(x[x>5]) # Trükib välja need vektori x elemendid, mis on suuremad kui 5
y[x>5] <- 20 # y-tunnuse väärtused nende indeksite korral, mille puhul keltib x>5, muudetakse 20-ks
print(y)
y[x<=5] <- x[x<=5] # y-tunnuse väärtused nende indeksite korral, mille puhul kehtib x<=5,
# muudetakse võrdseks vastavate x väärtustega
print(y)
y[2] <- 102 # y-tunnuse (vektori y) teine element muudetakse ära 102-ks.
y2 <- y %% 3 # Leiab vektori, mis vastab y komponentide kolmega jagamise jääkidele.
M <- matrix(z,ncol=2) # moodustab z väärtustest maatriksi, täites selle veergude kaupa
M <- matrix(z,ncol=2,byrow = T) # moodustab z väärtustest maatriksi, täites selle ridade kaupa
M[2,] # maatriksi teine rida
M[,1]+M[,2]# maatriksi M esimese ja teise veeruvektori summa
sum(z<4) # leab vektori z arvust 4 väiksemate elementide arvu
Harjutus 2 Defineerige funktsioon
loendaja, mis etteantud kaheveerulise maatriksi
M ning kahe muutuja funktsiooni f korral
väljastab M ridadele vastavate tasandi punktide \((x,y)\) arvu, mille korral kehtib võrratus
\(f(x,y)<0\). Kontrolliks:
funktsiooni \(f(x,y)=2\cdot x-y\)
korral peaks R näiteandmestiku cars puhul käsu
loendaja(cars,f) tulemuseks tulema 33. Tehke funktsiooni
loendaja abil kindlaks, kui palju andmestikule
cars vastavaid xy-tasandi punkte jäävad keskpunktiga
(20,60) ja raadiusega 20 ringi sisse.
[1] 16
Lineaarse kongruentse generaatori algoritm:
Kirjutage funktsioon LKG, mis genereerib lineaarset
kongruentset generaatorit kasutades pseudojuhuslikke arve. Generaator
peaks väljastama soovitud arvu pseudojuhuslikke suuruseid. Näiteks kui
pöördume tema poole käsuga LKG(10), siis peaksime saama
vastuseks 10st arvust koosneva vektori. Lisakas peab olema võimalik ette
anda kasutatav seeme (ehk \(x_0\)
väärtus) ning muuta kasutatava generaatori parameetreid \(a,b,m\), mille vaikeväärtusteks võtta
seeme=1,a=511,b=17,m=10000.
Näiteks käsu LKG(5) tulemuseks peaks tulema
## [1] 0.0528 0.9825 0.0592 0.2529 0.2336
Harjutus 3 Tekitage funktsioniga LKG
300 juhuarvu, moodustage neist kaheveeruline maatriks (ridade kaupa) ja
kujutage saadud punktid tasandil
Harjutus 4 Tekitage umbes 50 aastat tagasi populaarse RANDU generaatoriga (vastab valikutele \(a=65539,\ b=0,\ m=2^{31}\)) seemnest \(x_0=11\) lähtuvalt 30000 väärtust, moodustage neist kolmeveeruline maatriks (ridade kaupa) ja tehke seejärel kindlaks, kui palju erinevaid väärtuseid omandab suurus \(W=Z-6Y+9X\), kus \(X,Y,Z\) vastavad tekitatud maatriksi esimesele, teisele ja kolmandale tulbale. Tulemuste üle järgi mõtlemisel on abiks teadmine, et kui tekitada kolmemõõtmelises ruumis punkte sõltumatute $U(0,,1) juhuslike arvude abil, siis peaks W omandama kõiki väärtuseid lõigus \([-6,\,10]\) ning näiteks tõenäosus, et \(2<W<3\) on suurem kui 0.1.
W
-5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9
73 255 473 632 878 1053 1173 1150 1071 1010 827 604 436 256 109
Esitamine Moodle kaudu, tähtaeg 12.09.2023. Esitada tuleb ka .R või .Rmd fail ning lisaks kas pdf või HTML file, kus on näha kood koos tuletuskäikude, tulemuste ja kommentaaridega.
integrate) ei sobi siin
kursuses täpse väärtuse leidmiseks!