R 2.del

R 2.del

Avtor: Matija Lokar

Branje z datoteke

  • Datoteka z ocenami kolokvijev. Vsebina je

    ImePriimekKol1Kol2Kol3
    JanezVsezna100100100
    MickaNimapojma305
    FrancPovprečni564572
    IvanaBože394592
  • Podatki so ločeni s presledki
  • Preberemo z

    • rezKol <- read.table("kol.txt",header=TRUE)
    • Pozor na ustrezen imenik!

      • File/Change dir …
      • Seveda lahko uporabimo tudi naslove oblike “c:\temp\bla.dat”
    • header=TRUE

      • Prva vrstica niso podatki, ampak imena stolpcev

Tabela

  • S tem smo dejansko ustvarili tabelo
  • Ker imamo "glavo" (header = TRUE), dostop do stolpcev

    • Operator
    • podKolIme
  • plot(podKolPriimek, podKolKol1)
  • attach(podKol)

    • plot(Priimek, Kol1)
    • mean(Kol2)
  • detach(podKol)

Tabela - dostop

  • Dvodimenzionalni vektor
  • plot(podKol[1], podKol[3])
  • podKol[1,]

    • Podatki o prvem študentu
  • podKol[1:3, 2:5]

    • Rezultati kolokvijev prvih treh študentov, brez imen
  • samoRez <- podKol[,3:5]

    • Le rezultati kolokvijev

Vnos tabele

  • podatki <- edit(data.frame())
  • Pozor na NA

    • Ni podatka
    • R lahko "ignorira" take podatke
  • Možnost spreminjanja imen stolpcev
(slika_r5.png) (slika_r6.png)

Urejanje tabele

  • Urejanje

    • edit(podKol)
    • Popravimo in zapremo
    • In nič se ne zgodi …

      • Izpis sicer ok, a
      • > podKol Nespremenjeno stanje
      • Nov objekt!
  • Zato

    • podKol = edit(podKol)
    • Ali pa: fix(podKol)
(slika_r7.png)

Shranjevanje

  • Shrani

    • write.table(podKol,file="E:/pod.txt")

      "Ime""Priimek""Kol1""Kol2""Kol3"
      "1""Janez""Vsezna"100100100
      "2""Micka""Nimapojma"305
      "3""Franc""Povprečni"564572
      "4""Ivana""Bože"394592
  • Zato

    • write.table(podKol, file="E:/test1.txt", row.names=F, quote=F)

      ImePriimekKol1Kol2Kol3
      JanezVsezna100100100
      MickaNimapojma305
      FrancPovprečni564572
      IvanaBože394592

Vgrajeni vzorci

Obdelava

  • sapply(gejzirDat, max)

    • Na stolpcih tabele uporabi funkcijo max
  • sapply(gejzirDat, median)
  • sapply(gejzirDat, mean)
  • Ali pa vse skupaj:

    • summary(gejzirDat)

Histogram

barplot(gejzirDateruptions)(slika_r9.png)
hist(gejzirDateruptions)(slika_r10.png)

Grupiranje:

  • hist(gejzirDateruptions, breaks = c(1.5, 3, 4.5, 6))
(slika_r11.png)
  • hist(gejzirDateruptions, breaks = c(1:6))
(slika_r12.png)

Histogram II

Še en zgled:

  • pod <- c(3, 1, 1, 2, 2, 2, 1, 1, 2, 1)
  • meje <- c(0, 2, 4)
  • meje2 <- c(0, 1, 2, 4)

    • hist(pod)
    (slika_r13.png)
    • hist(pod, breaks=meje)
    (slika_r14.png)
    • hist(pod, breaks=meje2)
    (slika_r15.png)
    • hist(pod,freq=F)
    (slika_r16.png)

Programiranje - zanke

  • Zanke:

    • while
    • repeat
  • for (i in 1:m){ … }
  • while (pogoj) { … }
  • Kaj dela tale koda:

    st <- 0
    pod <- c()
    while (st < 10) {
      bla <- scan()
      pod <- c(pod, bla[1])
      st <- st + 1
    }

Programiranje – pogojni stavek

  • if (pogoj) izrazT else izrazF

    • Če je pogoj prav, vrne vrednost izraza izrazT, sicer pa izrazF
  • Več izrazov:

    • if (pogoj) { izraziT } else { izraziF }
    • Izraze ločimo s ; Raje

        if (pogoj) {
            izraziT
        } else { # obvezno else takoj za {
          izraziF
        }

Vrednost

  • Tudi zanke in pogojni stavki imajo vrednost!
  • x <- if (y < 0) 5 else -5

Zgled

m <- 10000
x <- numeric(m) # x je vektor 10000 števil
for (i in 1:m){
   x[i] <- sum(sample(1:6, 2, repl=T))
   # vsak xi je vsota dveh metov kocke
   # sample(1:6) – permutacija!
   # sample(1:6, 2) – izbor dveh od 6
   # brez ponavljanja
}
meje <- (1:12) + .5
meje <- (1:12) + .5
hist(x, breaks=meje, prob=T, xlab='Padlo pik',
     ylab = 'verjetnost', main="Met dveh kock")
p <- c(1:6, 5:1)/36  # teoretične vrednosti
points(2:12, p) # narišemo točke

Rezultat

(slika_r17.png)

Funkcije

  • Izraz oblike

    • imeFun <- function(argumenti) telo
  • ustvari funkcijo z imenom imeFun.
  • Primer:

    kvadrat <- function(x) {
        return (x*x)# pozor na return ()!!
      }
    kvadrat <- function(x) {
       x*x
       }
    kvadrat <- function(x) x*x
  • Uporaba

    • kvadrat(5)

Zgled – preštej lihe

Funkcija, ki prešteje število lihih elementov v vektorju.

stejLihe <- function(vektor) {
   k <- 0
   for (n in vektor) {
     if (n %% 2 == 1) k <- k + 1
   }
   return(k)
}
Uporaba:

> bla <- c(2, 34, 4, 1, 2, 6, 7, 18, sample(1:20, 5))
> bla
 [1]  2 34  4  1  2  6  7 18 14 12 17 19  1
> stejLihe(bla)
[1] 5

Zgled – največji skupni delitelj

nsd <- function(a, b) {
   if (b == 0) return (abs(a))
   return (nsd(b, a %% b))
}

ali

nsd <- function(a, b) {
   if (b == 0) abs(a)
   else nsd(b, a %% b)
}

ali

nsd <- function(a, b)
  if (b == 0) abs(a) else nsd(b, a %% b)

Funkcija kot argument

Tudi ime funkcije je lahko argument (kot pri Pythonu)

vF <- function (f, x) {
   return (f(x))
}

> vF(abs, -7)
[1] 7
> vF(sqrt, 7)
[1] 2.645751
> vF(sin, 7)
[1] 0.6569866
> vF(stejLihe, sample(1:10))
[1] 5
0%
0%