5 Schleifen

library("tidyverse")
library(reticulate)
use_python("/usr/local/bin/python3")

5.1 if else

x <- 5

if(x==5) "Hallo" else "Ciao"
## [1] "Hallo"
if (x == 3) {
  print("lol")
} else {
  print("not lol")
}
## [1] "not lol"

5.2 repeat

i <- 1
repeat {
  print(i)
  i <- i+1
  if (i==14) break
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
## [1] 11
## [1] 12
## [1] 13

5.3 while

i <- 1
while (i < 3) {
  i <- i+1 
  print(mean(sample(0:50,10)))
}
## [1] 28.2
## [1] 21.7

5.4 for

i <- 1
for (i in 1:5) {
  print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
for (i in 4:9) print(i)
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9

5.4.1 i in m: m kann beliebig sein

m <- c(1:7, 640:643)
for (i in m) {
  print(i)
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6
## [1] 7
## [1] 640
## [1] 641
## [1] 642
## [1] 643

5.4.2 praktische Anwendung: Validierung

## Warning in mean.default(res_train): argument is not
## numeric or logical: returning NA
## [1] NA
## Warning in mean.default(res_valid, na.rm = T): argument
## is not numeric or logical: returning NA
## [1] NA

5.5 apply

x <- matrix(1:10, ncol = 2)
apply(x, 1, max) # maximum jeder Zeile (margin = dimension)
## [1]  6  7  8  9 10

5.6 funktionen

definition einer Funktion, die uns Mittelwert+ SD ausgibt

mittel_sd <- function(x) {
  if (is.na(mean(x))) {
    mittel_sd <- "Überprüfen sie den Vektor!"
  } else {
    mittel_sd <- c(Mittelwert = mean(x), Standardabweichung = sd(x))
  }
  return(mittel_sd)
}

mittel_sd(starwars$height[!is.na(starwars$height)])
##         Mittelwert Standardabweichung 
##          174.35802           34.77043
confidence_interval <- function(vector, interval, na_do = T) { #vorfestgelegter Wert für na_do
  # 1. standardabweichung der stichprobe
  vec_sd <- sd(vector, na.rm = na_do)
  # 2. Stichprobenumfang
  n <- length(vector)
  # 3. Mittelwert
  vec_mean <- mean(vector, na.rm = na_do)
  # 4.Quantil der t-Verteilung
  se <- qt((interval +1 )/2, df = (n-1)*vec_sd/sqrt(n))
  # berechnung Konfidenz Intervall
  result <- c("lower" = vec_mean -se, "upper" = vec_mean + se)
  return(result)
}

confidence_interval(starwars$height, 0.95)
##    lower    upper 
## 172.3906 176.3254

5.7 Aufgabenblatt

library(tidyverse)

5.7.1 a)

i <- 1
repeat {
  print(mean(sample(0:50,10)))
  i <- i+1
  if (i==10) break
}
## [1] 24.9
## [1] 26.4
## [1] 32.5
## [1] 20.1
## [1] 31.1
## [1] 23.4
## [1] 27
## [1] 22.6
## [1] 25.4

5.7.2 b)

i <- 0
while (i <= 10) {
  print(mean(sample(0:50,10)))
  i <- i+1
}
## [1] 23.2
## [1] 32.3
## [1] 22.9
## [1] 20.7
## [1] 27.3
## [1] 28.7
## [1] 28.7
## [1] 26.4
## [1] 19.3
## [1] 27.4
## [1] 30

5.7.3 c)

for (i in 1:10) {
  print(mean(sample(0:50,10)))
}
## [1] 23.4
## [1] 32.3
## [1] 28.8
## [1] 30.3
## [1] 27.9
## [1] 20.9
## [1] 28.6
## [1] 27.7
## [1] 31.4
## [1] 14.2

5.7.4 d)

norm <- rnorm(1000, mean = 100, sd = 25)
norm_matrix <- matrix(norm, ncol = 20)
for (i in 20:22) {
  for (j in 5:7) {
    print(norm_matrix[i,j])
  }
  print("--")
}
## [1] 103.8033
## [1] 59.40344
## [1] 89.47627
## [1] "--"
## [1] 80.8743
## [1] 149.3586
## [1] 136.7231
## [1] "--"
## [1] 77.39322
## [1] 104.8006
## [1] 93.5635
## [1] "--"

5.7.5 e)

norm_vector <- rnorm(1000,100,33)
average <- vector()

for (i in 1:length(norm_vector)) {
  mean_vec <- mean(sample(norm_vector, 400))
  average <- append(average,mean_vec)
}
mean(average)
## [1] 100.7124

5.7.6 f)

wurf <- function(x, M) {
  avg_vector <- vector()
  for (i in 1:M) {
    samp <- sample(c("Kopf", "Zahl"), x, replace = T)
    avg_vector <- append(avg_vector, sum(samp=="Kopf"))
  }
  return(mean(avg_vector))
}
wurf(100,10)
## [1] 52.9

5.7.7 g)

5.7.8 h)

corr <- function(x,y){
  #Test
  if (!(is.numeric(x) | !is.numeric(y))) {
    return("Ein Wert ist nicht numerisch")
  }
  corr <- cor.test(x,y, method= "pearson")
  df <- data.frame(x,y)
  lin <- lm(x~y,df)
  return(list(corr$estimate,lin))
}

corr(1:10, 10:1)
## [[1]]
## cor 
##  -1 
## 
## [[2]]
## 
## Call:
## lm(formula = x ~ y, data = df)
## 
## Coefficients:
## (Intercept)            y  
##          11           -1

5.7.9 i)

“Schreiben Sie eine Schleife, die zwei Würfel M-mal rollt und deren Summe berechnet. Im Anschluss soll die erwartete Summe der beiden Würfel ausgegeben werden. Je größer M, desto mehr sollte sich die erwartete Augensumme der theoretischen, erwarteten Augensumme anpassen.” (Was ist mit markiertem Teil gemeint?)

M <- 10
for (i in 1:M) {
  würfel1 <- sample(1:6,1)
  würfel2 <- sample(1:6,1)
  summe1 <- würfel1 + würfel2
}

5.7.10 j)

library(MASS)
apply(Animals,2, FUN=mean)
##      body     brain 
## 4278.4388  574.5214

5.7.11 k)

apply(Animals[1],1, FUN=mean)
##  Mountain beaver              Cow        Grey wolf 
##            1.350          465.000           36.330 
##             Goat       Guinea pig      Dipliodocus 
##           27.660            1.040        11700.000 
##   Asian elephant           Donkey            Horse 
##         2547.000          187.100          521.000 
##     Potar monkey              Cat          Giraffe 
##           10.000            3.300          529.000 
##          Gorilla            Human African elephant 
##          207.000           62.000         6654.000 
##      Triceratops    Rhesus monkey         Kangaroo 
##         9400.000            6.800           35.000 
##   Golden hamster            Mouse           Rabbit 
##            0.120            0.023            2.500 
##            Sheep           Jaguar       Chimpanzee 
##           55.500          100.000           52.160 
##              Rat    Brachiosaurus             Mole 
##            0.280        87000.000            0.122 
##              Pig 
##          192.000