diff --git a/.RData b/.RData new file mode 100644 index 0000000..edf1e33 Binary files /dev/null and b/.RData differ diff --git a/.Rhistory b/.Rhistory new file mode 100644 index 0000000..f7b19bd --- /dev/null +++ b/.Rhistory @@ -0,0 +1,423 @@ +do.call(sqrt,4) +do.call(sqrt,list(4)) +pi |> sqrt +pi |> sqrt() +l1 = seq(0,2*pi,length=100) +l1.length +l1.length() +l1$length +l1 +length(l1) +plot(l1,) +sin = sin(x) +sin = sin(l1) +plot(x,sin, type="l") +plot(l1,sin, type="l") +carsten = sin(l1) +plot(carsten,sin, type="l") +plot(l1,carsten, type="l") +?rep +# Ihre Lösung +data.frame(seq(0:10)) +# Ihre Lösung +data.frame(seq(0:10), seq(3,4)) +# Ihre Lösung +data.frame(seq(0:10), seq(0:10)) +wort = rep("Wort",100) +data.frame(zahl,wort) +df.head() +df <- data.frame(zahl,wort) +# Ihre Lösung +zahl <- seq(5,25,length=100) +hl <- seq(5,25,length=100) +wort <- rep("Wort",100) +df <- data.frame(zahl,wort) +df.head() +head(df) +head(df,10) +res = df[[67]] +res = df +df +res = df$zahl +res +res = df$zahl[[67]] +res +print(round(res,2)) +# Ihre Lösung: +M +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +M +?apply +# Ihre Lösung: +apply(M,sum) +```{r} +# Ihre Lösung: +apply(M,M[:,2],sum) +# Ihre Lösung: +apply(M,M[1],sum) +# Ihre Lösung: +apply(M,M[2],sum) +# Ihre Lösung: +apply(M,M[3],sum) +# Ihre Lösung: +apply(M,M[1],sum) +# Ihre Lösung: +apply(M,M[2],sum) +# Ihre Lösung: +apply(M,M[2],sum) +# Ihre Lösung: +apply(M,M[1],sum) +# Ihre Lösung: +apply(M,M[1],sum) +# Ihre Lösung: +apply(M,c(1,2),sum) +apply(M,c(1,2),sum) +apply(M,2,sum) +k = M[:,5] +k = M[,5] +k +length(k) +sum(k) +k = M[,1] +k +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +apply(M,2,sum) +k = M[,1] +sum(k) +apply(M,2,sqrt) +0 +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 = function(a){ +if (a == 2){ +return 1 +1 +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 = function(a){ +if (a == 2){ +1 +} +0 +} +apply(M,2,sum) +apply(M,2,count_2) +?sqrt +count_2(3) +count_2(2) +0 +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 = function(a){ +if (a == 2){ +1 +} +else{ +0 +} +} +apply(M,2,count_2) +count_2(2) +?apply +```{r} +0 +?all +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +print(typeof(a)) +} +apply(M,2,count_2) +count_2(2) +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +print(typeof(a)) +print(length(a)) +} +apply(M,2,count_2) +count_2(2) +apply(M,2,count_2) +sum(a) +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +sum(a) +} +apply(M,2,count_2) +a[[a==2]] +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a[[a==2]] +} +apply(M,2,count_2) +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a +} +apply(M,2,count_2) +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a +} +res = apply(M,2,count_2) +res +?sum +?count +a==2 +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a==2 +} +res = apply(M,2,count_2) +res +num_2 = apply(M,2,sum) +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a==2 +} +res = apply(M,2,count_2) +num_2 = apply(M,2,sum) +num_2 +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a==2 +} +res = apply(M,2,count_2) +num_2 = apply(res,2,sum) +num_2 +2_in_r5 = num2[[5]] +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a==2 +} +res = apply(M,2,count_2) +num_2 = apply(res,2,sum) +2in_r5 = num2[[5]] +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a==2 +} +res = apply(M,2,count_2) +num_2 = apply(res,2,sum) +two_in_r5 = num2[[5]] +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a==2 +} +res = apply(M,2,count_2) +num_2 = apply(res,2,sum) +two_in_r5 = num_2[[5]] +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a==2 +} +res = apply(M,2,count_2) +z = apply(res,2,sum) +two_in_r5 = z[[5]] +print("Es gibt {two_in_r5} ") +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a==2 +} +res = apply(M,2,count_2) +z = apply(res,2,sum) +two_in_r5 = z[[5]] +print(paste0("Es gibt", two_in_r5) +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a==2 +} +res = apply(M,2,count_2) +z = apply(res,2,sum) +two_in_r5 = z[[5]] +print(paste0("Es gibt", two_in_r5)) +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a==2 +} +res = apply(M,2,count_2) +z = apply(res,2,sum) +two_in_r5 = z[[5]] +print(paste0("Es gibt ", two_in_r5, " in Spalte 5")) +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +a==2 +} +res = apply(M,2,count_2) +z = apply(res,2,sum) +two_in_r5 = z[[5]] +print(paste0("Es gibt ", two_in_r5, " 2er in Spalte 5")) +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +sum(a==2) +} +res = apply(M,2,count_2) +z = apply(res,2,sum) +res +set.seed(12) # Zufallszahlengenerator gleich machen. +M = matrix(sample(c(1, 2, 3), 10 * 100, T), nrow = 100) +# Ihre Lösung: +count_2 <- function(a){ +sum(a==2) +} +z = apply(M,2,count_2) +print(paste0("Es gibt ", z[[5]], " 2er in Spalte 5")) +seq(1, 10, length.out = 20) +length(seq(1, 10, length.out = 20)) +r = seq(1, 10, length = 20) +r +r = seq(1, 10, by=0.5) +r +r = seq(0, 10, length = 20) +r +r = seq(1, 10, length = 21) +r +r = seq(0, 10, length.out = 20) +r +r = seq(0, 10, length.out = 10) +r +r = seq(1, 10, length.out = 10) +r +r = seq(1, 10, length.out = 20) +r +setwd("~/Documents/Masterstudium/1.Semester/DSR") +git pulll +clear() +if (min >= max) { +stop("min muss kleiner als max sein.") +} +# Bitte mit echter Lösung in myhistogram.R ersetzen: +myhistogram = function(x, n, min, max) { +if (missing(min)) min <- base::min(x) +if (missing(max)) max <- base::max(x) +if (missing(n)) n <- 10 +if (min >= max) { +stop("min muss kleiner als max sein.") +} +range <- min + max +interval_ranges <- (max - min) / n +borders <- seq(min, max, length.out = n + 1) +counts <- rep(0, n) +for(value in x) { +for (i in 1:n){ +if (value >= borders[i] && value < borders[i+1]){ +counts[i] <- counts[i] + 1 +break +} +} +} +print(paste("Intervallgrößen: ", interval_ranges)) +list(borders=borders, counts = counts) +} +x = seq(-5, 6, by = 1 / 3) +l = myhistogram(x) +print(l$borders) +print(l$counts) +setwd("~/Documents/Masterstudium/1.Semester/DSR_Testate") +# Bitte mit echter Lösung in myhistogram.R ersetzen: +myhistogram = function(x, n, min, max) { +if (missing(min)) min <- base::min(x) +if (missing(max)) max <- base::max(x) +if (missing(n)) n <- 10 +if (min >= max) { +stop("min muss kleiner als max sein.") +} +range <- min + max +interval_ranges <- (max - min) / n +borders <- seq(min, max, length.out = n + 1) +counts <- rep(0, n) +for(value in x) { +for (i in 1:n){ +if (value >= borders[i] && value < borders[i+1]){ +counts[i] <- counts[i] + 1 +break +} +} +} +print(paste("Intervallgrößen: ", interval_ranges)) +list(borders=borders, counts = counts) +} +x = seq(-5, 6, by = 1 / 3) +l = myhistogram(x) +print(l$borders) +print(l$counts) +x = seq(-5, 6, by = 1 / 3) +l = myhistogram(x, n = 10, min = -5, max = 6) +solution = list( +borders = c(-5.0, -3.9, -2.8, -1.7, -0.6, 0.5, 1.6, 2.7, 3.8, 4.9, 6.0), +counts = c(4, 3, 3, 4, 3, 3, 4, 3, 3, 3) +) +print(l$borders) +print(l$counts) +set.seed(1) +x = rnorm(0, 1, n = 1000) +# h = myhistogram(x, n = 20) +# ggplot() + ... +# Bitte mit echter Lösung in myhistogram.R ersetzen: +myhistogram = function(x, n, min, max) { +if (missing(min)) min <- base::min(x) +if (missing(max)) max <- base::max(x) +if (missing(n)) n <- 10 +if (min >= max) { +stop("min muss kleiner als max sein.") +} +range <- min + max +interval_ranges <- (max - min) / n +borders <- seq(min, max, length.out = n + 1) +counts <- rep(0, n) +for(value in x) { +for (i in 1:n){ +if (value >= borders[i] && value < borders[i+1]){ +counts[i] <- counts[i] + 1 +break +} +} +} +print(paste("Intervallgrößen: ", interval_ranges)) +list(borders=borders, counts = counts) +} +x = seq(-5, 6, by = 1 / 3) +l = myhistogram(x) +print(l$borders) +print(l$counts) diff --git a/Testat_1/Aufgabe_1/EigenesHistogramm.Rmd b/Testat_1/Aufgabe_1/EigenesHistogramm.Rmd index ffbb282..44ea79e 100644 --- a/Testat_1/Aufgabe_1/EigenesHistogramm.Rmd +++ b/Testat_1/Aufgabe_1/EigenesHistogramm.Rmd @@ -1,118 +1,160 @@ ---- -title: "Eigenes Histogramm" -output: html_document ---- - -# Eigenes Histogramm - -Es soll ein eigenes Histogramm erzeugt werden. Der Dateiname für das Skript ist `myhistogram.R`. - -## Funktion `myhistogram` - -Programmieren Sie in R die Funktion `myhistogram`, die als Parameter `x` einen Vektor aus Zahlen erhält. Die Zahlen werden in `n` Intervalle einsortiert, und es wird gezählt, wie oft eine Zahl in einem Intervall vorkommt. Der Rückgabewert ist eine Liste mit den Einträgen `borders`, die die $n+1$ Intervallgrenzen enthalten und `counts`, der die Anzahlen enthält. - - * Die $n$ Intervalle sollen gleich groß sein ($\Delta b$), d.h. für die Intervallgrenzen $b_1, b_2, \ldots, b_{n+1}$ gilt $\frac{b_{i+1}-b_{i}}{n}=\Delta b$ für $i=1, 2, \ldots n$. - * Die äußeren Grenzen $b_1$ und $b_n$ sollen als optionale Parametern `min` und `max` an die Funktion übergeben werden. Werte aus `x`, die zu keinem Intervall gehören, sollen ignoriert werden. Es wird aber eine Warnung ausgegeben, die sagt, welche Zahlen außerhalb des Bereichs liegen. - * Eine Zahl $z$ gehört zum $i$-ten Intervall, falls $b_i \leq z < b_{i+1}$ gilt. - -Bis auf `x` sollen alle Parameter optional sein. Überlegen Sie sinnvolle Default-Werte. - -Es ist natürlich **nicht** erlaubt, in der eigenen Funktion andere Funktionen zu nutzen, die ein Histogramm erzeugen. - -Hier ein Beispiel: -```{r eval = F} -# Bitte mit echter Lösung in myhistogram.R ersetzen: -myhistogram = function(x, n, min, max) { - if (missing(min)) min <- base::min(x) - if (missing(max)) max <- base::max(x) - if (missing(n)) n <- 10 - - if (min >= max) { - stop("min muss kleiner als max sein.") - } - - range <- min + max - interval_ranges <- (max - min) / n - borders <- seq(min, max, length.out = n + 1) - counts <- rep(0, n) - - for(value in x) { - for (i in 1:n){ - if (value >= borders[i] && value < borders[i+1]){ - counts[i] <- counts[i] + 1 - break - } - } - } - - print(paste("Intervallgrößen: ", interval_ranges)) - list(borders=borders, counts = counts) -} -x = seq(-5, 6, by = 1 / 3) - -l = myhistogram(x) -print(l$borders) -print(l$counts) -``` - - - -## Beispieldaten - -Hier zunächst zwei Beispiele. - -### Beispiel 1 - -Es wird eine Warnung ausgeben: -``` -## Warning in myhistogram(x, n = 10, min = -5, max = 6): Zahl(en) außerhalb -## Intervallgrenzen: 6 -``` - -```{r} -x = seq(-5, 6, by = 1 / 3) -l = myhistogram(x, n = 10, min = -5, max = 6) -solution = list( - borders = c(-5.0, -3.9, -2.8, -1.7, -0.6, 0.5, 1.6, 2.7, 3.8, 4.9, 6.0), - counts = c(4, 3, 3, 4, 3, 3, 4, 3, 3, 3) -) -print(l$borders) -print(l$counts) -``` - -### Beispiel 2 - -```{r} -x = seq(-5, 6, by = 1 / 3) -# myhistogram(x, n = 5, min = -10, max = 10) -solution = list(borders = c(-10, -6, -2, 2, 6, 10), - counts = c(0, 9, 12, 12, 1)) -``` - -### Beispiel 3 - -Testen Sie nun hier Ihre Funktion mit weiteren Datensätzen. - -### Beispiel 4 - -Testen Sie nun hier Ihre Funktion mit weiteren Datensätzen. - -### Beispiel 5 - -Testen Sie nun hier Ihre Funktion mit weiteren Datensätzen. - - -## Barplot - -Nutzen Sie Ihre Funktion `myhistogram` und erzeugen Sie einen Barplot mit _ggplot_. Die _x_-Achse zeigt dabei die Mitte des Intervalls und die _y_-Achse die Anzahl der Elemente in dieser Klasse. - -Tipp: Der Parameter `stat` von `geom_bar` ist wichtig. - -Vervollständigen Sie den Chunk. Die Kommentare sollen zu Anweisungen umgewandelt werden: - -```{r} -set.seed(1) -x = rnorm(0, 1, n = 1000) -# h = myhistogram(x, n = 20) -# ggplot() + ... -``` +--- +title: "Eigenes Histogramm" +output: + html_document: default + pdf_document: default +--- + +# Eigenes Histogramm + +Es soll ein eigenes Histogramm erzeugt werden. Der Dateiname für das Skript ist `myhistogram.R`. + +## Funktion `myhistogram` + +Programmieren Sie in R die Funktion `myhistogram`, die als Parameter `x` einen Vektor aus Zahlen erhält. Die Zahlen werden in `n` Intervalle einsortiert, und es wird gezählt, wie oft eine Zahl in einem Intervall vorkommt. Der Rückgabewert ist eine Liste mit den Einträgen `borders`, die die $n+1$ Intervallgrenzen enthalten und `counts`, der die Anzahlen enthält. + + * Die $n$ Intervalle sollen gleich groß sein ($\Delta b$), d.h. für die Intervallgrenzen $b_1, b_2, \ldots, b_{n+1}$ gilt $\frac{b_{i+1}-b_{i}}{n}=\Delta b$ für $i=1, 2, \ldots n$. + * Die äußeren Grenzen $b_1$ und $b_n$ sollen als optionale Parametern `min` und `max` an die Funktion übergeben werden. Werte aus `x`, die zu keinem Intervall gehören, sollen ignoriert werden. Es wird aber eine Warnung ausgegeben, die sagt, welche Zahlen außerhalb des Bereichs liegen. + * Eine Zahl $z$ gehört zum $i$-ten Intervall, falls $b_i \leq z < b_{i+1}$ gilt. + +Bis auf `x` sollen alle Parameter optional sein. Überlegen Sie sinnvolle Default-Werte. + +Es ist natürlich **nicht** erlaubt, in der eigenen Funktion andere Funktionen zu nutzen, die ein Histogramm erzeugen. + +Hier ein Beispiel: +```{r eval = T} +# Bitte mit echter Lösung in myhistogram.R ersetzen: +myhistogram = function(x, n, min, max) { + if (missing(min)) min <- base::min(x) + if (missing(max)) max <- base::max(x) + if (missing(n)) n <- 10 + + if (min >= max) { + stop("min muss kleiner als max sein.") + } + + range <- min + max + borders <- seq(min, max, length.out = n + 1) + counts <- rep(0, n) + + outside <- x[x < min | x >= max] + if (length(outside) > 0) { + warning(paste("Zahl(en) außerhalb Intervallgrenzen:", + paste(outside, collapse = ", "))) + } + + for(value in x) { + for (i in 1:n){ + if (value >= borders[i] && value < borders[i+1]){ + counts[i] <- counts[i] + 1 + break + } + } + } + + list(borders=borders, counts = counts) +} +x = seq(-5, 6, by = 1 / 3) + +l = myhistogram(x) +print(l$borders) +print(l$counts) +``` + + + +## Beispieldaten + +Hier zunächst zwei Beispiele. + +### Beispiel 1 + +Es wird eine Warnung ausgeben: +``` +## Warning in myhistogram(x, n = 10, min = -5, max = 6): Zahl(en) außerhalb +## Intervallgrenzen: 6 +``` + +```{r} +x = seq(-5, 6, by = 1 / 3) +l = myhistogram(x, n = 10, min = -5, max = 6) +solution = list( + borders = c(-5.0, -3.9, -2.8, -1.7, -0.6, 0.5, 1.6, 2.7, 3.8, 4.9, 6.0), + counts = c(4, 3, 3, 4, 3, 3, 4, 3, 3, 3) +) +print(l$borders) +print(l$counts) +``` + +### Beispiel 2 + +```{r} +x = seq(-5, 6, by = 1 / 3) +myhistogram(x, n = 5, min = -10, max = 10) +solution = list(borders = c(-10, -6, -2, 2, 6, 10), + counts = c(0, 9, 12, 12, 1)) +``` + +### Beispiel 3 + +Ganze Zahlen mit Wiederholungen, Default-Werte für `n`, `min` und `max`. Da $b_{n+1}$ selbst zu keinem Intervall gehört, wird das Maximum (10) als außerhalb gemeldet: + +```{r} +x = c(1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 6, 7, 8, 9, 10) +l = myhistogram(x) +print(l$borders) +print(l$counts) +``` + +### Beispiel 4 + +Werte unterhalb von `min` und oberhalb von `max` werden ignoriert und in der Warnung aufgelistet: + +```{r} +x = c(-3, -1, 0, 0.5, 1, 2.5, 4, 4.99, 5, 7) +l = myhistogram(x, n = 5, min = 0, max = 5) +solution = list(borders = c(0, 1, 2, 3, 4, 5), + counts = c(2, 1, 1, 0, 2)) +print(l$borders) +print(l$counts) +``` + +### Beispiel 5 + +Normalverteilte Zufallszahlen, deren Bereich vollständig innerhalb von `min` und `max` liegt (keine Warnung): + +```{r} +set.seed(42) +x = rnorm(100, mean = 0, sd = 1) +l = myhistogram(x, n = 8, min = -4, max = 4) +print(l$borders) +print(l$counts) +print(sum(l$counts)) # muss 100 ergeben +``` + + +## Barplot + +Nutzen Sie Ihre Funktion `myhistogram` und erzeugen Sie einen Barplot mit _ggplot_. Die _x_-Achse zeigt dabei die Mitte des Intervalls und die _y_-Achse die Anzahl der Elemente in dieser Klasse. + +Tipp: Der Parameter `stat` von `geom_bar` ist wichtig. + +Vervollständigen Sie den Chunk. Die Kommentare sollen zu Anweisungen umgewandelt werden: + +```{r} +library("ggplot2") +set.seed(1) +x = rnorm(0, 1, n = 1000) +h = myhistogram(x, n = 10) +bins = (h$borders[-1]+h$borders[-length(h$borders)])/2 # letzte und erste Grenze entfernen sodass nebeneinanderliegende Grenzen in den Vektoren jeweils auf der gleichen Indexposition liegen. Man verschiebt die Grenzen also + +#print(h$borders[-1]) +#print(h$borders[length(-h$borders)]) + +print(h$borders) +count = h$counts #/sum(h$counts) # Damit kann man die relative statt der absoluten Häufigkeit anzeigen +ggplot() + + geom_bar(aes(x=bins, y=count), stat="identity")+ + labs(title="Histogramm für normalverteilte Daten", y="Absolute Häufigkeit", x="Intervalle") + +``` diff --git a/Testat_1/Aufgabe_1/EigenesHistogramm.html b/Testat_1/Aufgabe_1/EigenesHistogramm.html index 4c8dd03..b4beeb6 100644 --- a/Testat_1/Aufgabe_1/EigenesHistogramm.html +++ b/Testat_1/Aufgabe_1/EigenesHistogramm.html @@ -1,507 +1,566 @@ - - - - -
- - - - - - - - -Es soll ein eigenes Histogramm erzeugt werden. Der Dateiname für das
-Skript ist myhistogram.R.
myhistogramProgrammieren Sie in R die Funktion myhistogram, die als
-Parameter x einen Vektor aus Zahlen erhält. Die Zahlen
-werden in n Intervalle einsortiert, und es wird gezählt,
-wie oft eine Zahl in einem Intervall vorkommt. Der Rückgabewert ist eine
-Liste mit den Einträgen borders, die die \(n+1\) Intervallgrenzen enthalten und
-counts, der die Anzahlen enthält.
min und max an die Funktion übergeben werden.
-Werte aus x, die zu keinem Intervall gehören, sollen
-ignoriert werden. Es wird aber eine Warnung ausgegeben, die sagt, welche
-Zahlen außerhalb des Bereichs liegen.Bis auf x sollen alle Parameter optional sein. Überlegen
-Sie sinnvolle Default-Werte.
Es ist natürlich nicht erlaubt, in der eigenen -Funktion andere Funktionen zu nutzen, die ein Histogramm erzeugen.
-Hier ein Beispiel:
-# Bitte mit echter Lösung in myhistogram.R ersetzen:
-myhistogram = function(x, n, min, max) {
- if (missing(min)){
-
- }
- if (missing(max)){
-
- }
- if (missing(n)){
- n <- 10
- }
- intervals <- length(x)/n
- print("Intervalle: ",intervals)
- print(paste("Intervalel: ", intervals))
- list(borders = c(), counts = c())
-}
-
-x = seq(-5, 6, by = 1 / 3)
-l = myhistogram(x)
-print(l$borders)
-print(l$counts)
-Hier zunächst zwei Beispiele.
-Es wird eine Warnung ausgeben:
-## Warning in myhistogram(x, n = 10, min = -5, max = 6): Zahl(en) außerhalb
-## Intervallgrenzen: 6
-x = seq(-5, 6, by = 1 / 3)
-# myhistogram(x, n = 10, min = -5, max = 6)
-solution = list(
- borders = c(-5.0, -3.9, -2.8, -1.7, -0.6, 0.5, 1.6, 2.7, 3.8, 4.9, 6.0),
- counts = c(4, 3, 3, 4, 3, 3, 4, 3, 3, 3)
-)
-x = seq(-5, 6, by = 1 / 3)
-# myhistogram(x, n = 5, min = -10, max = 10)
-solution = list(borders = c(-10, -6, -2, 2, 6, 10),
- counts = c(0, 9, 12, 12, 1))
-Testen Sie nun hier Ihre Funktion mit weiteren Datensätzen.
-Testen Sie nun hier Ihre Funktion mit weiteren Datensätzen.
-Testen Sie nun hier Ihre Funktion mit weiteren Datensätzen.
-Nutzen Sie Ihre Funktion myhistogram und erzeugen Sie
-einen Barplot mit ggplot. Die x-Achse zeigt dabei die
-Mitte des Intervalls und die y-Achse die Anzahl der Elemente in
-dieser Klasse.
Tipp: Der Parameter stat von geom_bar ist
-wichtig.
Vervollständigen Sie den Chunk. Die Kommentare sollen zu Anweisungen -umgewandelt werden:
-set.seed(1)
-x = rnorm(0, 1, n = 1000)
-# h = myhistogram(x, n = 20)
-# ggplot() + ...
-Es soll ein eigenes Histogramm erzeugt werden. Der Dateiname für das
+Skript ist myhistogram.R.
myhistogramProgrammieren Sie in R die Funktion myhistogram, die als
+Parameter x einen Vektor aus Zahlen erhält. Die Zahlen
+werden in n Intervalle einsortiert, und es wird gezählt,
+wie oft eine Zahl in einem Intervall vorkommt. Der Rückgabewert ist eine
+Liste mit den Einträgen borders, die die \(n+1\) Intervallgrenzen enthalten und
+counts, der die Anzahlen enthält.
min und max an die Funktion übergeben werden.
+Werte aus x, die zu keinem Intervall gehören, sollen
+ignoriert werden. Es wird aber eine Warnung ausgegeben, die sagt, welche
+Zahlen außerhalb des Bereichs liegen.Bis auf x sollen alle Parameter optional sein. Überlegen
+Sie sinnvolle Default-Werte.
Es ist natürlich nicht erlaubt, in der eigenen +Funktion andere Funktionen zu nutzen, die ein Histogramm erzeugen.
+Hier ein Beispiel:
+# Bitte mit echter Lösung in myhistogram.R ersetzen:
+myhistogram = function(x, n, min, max) {
+ if (missing(min)) min <- base::min(x)
+ if (missing(max)) max <- base::max(x)
+ if (missing(n)) n <- 10
+
+ if (min >= max) {
+ stop("min muss kleiner als max sein.")
+ }
+
+ range <- min + max
+ borders <- seq(min, max, length.out = n + 1)
+ counts <- rep(0, n)
+
+ outside <- x[x < min | x >= max]
+ if (length(outside) > 0) {
+ warning(paste("Zahl(en) außerhalb Intervallgrenzen:",
+ paste(outside, collapse = ", ")))
+ }
+
+ for(value in x) {
+ for (i in 1:n){
+ if (value >= borders[i] && value < borders[i+1]){
+ counts[i] <- counts[i] + 1
+ break
+ }
+ }
+ }
+
+ list(borders=borders, counts = counts)
+}
+x = seq(-5, 6, by = 1 / 3)
+
+l = myhistogram(x)
+## Warning in myhistogram(x): Zahl(en) außerhalb Intervallgrenzen: 6
+print(l$borders)
+## [1] -5.0 -3.9 -2.8 -1.7 -0.6 0.5 1.6 2.7 3.8 4.9 6.0
+print(l$counts)
+## [1] 4 3 3 4 3 3 4 3 3 3
+Hier zunächst zwei Beispiele.
+Es wird eine Warnung ausgeben:
+## Warning in myhistogram(x, n = 10, min = -5, max = 6): Zahl(en) außerhalb
+## Intervallgrenzen: 6
+x = seq(-5, 6, by = 1 / 3)
+l = myhistogram(x, n = 10, min = -5, max = 6)
+## Warning in myhistogram(x, n = 10, min = -5, max = 6): Zahl(en) außerhalb
+## Intervallgrenzen: 6
+solution = list(
+ borders = c(-5.0, -3.9, -2.8, -1.7, -0.6, 0.5, 1.6, 2.7, 3.8, 4.9, 6.0),
+ counts = c(4, 3, 3, 4, 3, 3, 4, 3, 3, 3)
+)
+print(l$borders)
+## [1] -5.0 -3.9 -2.8 -1.7 -0.6 0.5 1.6 2.7 3.8 4.9 6.0
+print(l$counts)
+## [1] 4 3 3 4 3 3 4 3 3 3
+x = seq(-5, 6, by = 1 / 3)
+myhistogram(x, n = 5, min = -10, max = 10)
+## $borders
+## [1] -10 -6 -2 2 6 10
+##
+## $counts
+## [1] 0 9 12 12 1
+solution = list(borders = c(-10, -6, -2, 2, 6, 10),
+ counts = c(0, 9, 12, 12, 1))
+Ganze Zahlen mit Wiederholungen, Default-Werte für n,
+min und max. Da \(b_{n+1}\) selbst zu keinem Intervall
+gehört, wird das Maximum (10) als außerhalb gemeldet:
x = c(1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 6, 7, 8, 9, 10)
+l = myhistogram(x)
+## Warning in myhistogram(x): Zahl(en) außerhalb Intervallgrenzen: 10
+print(l$borders)
+## [1] 1.0 1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1 10.0
+print(l$counts)
+## [1] 1 2 3 4 1 1 1 1 1 0
+Werte unterhalb von min und oberhalb von
+max werden ignoriert und in der Warnung aufgelistet:
x = c(-3, -1, 0, 0.5, 1, 2.5, 4, 4.99, 5, 7)
+l = myhistogram(x, n = 5, min = 0, max = 5)
+## Warning in myhistogram(x, n = 5, min = 0, max = 5): Zahl(en) außerhalb
+## Intervallgrenzen: -3, -1, 5, 7
+solution = list(borders = c(0, 1, 2, 3, 4, 5),
+ counts = c(2, 1, 1, 0, 2))
+print(l$borders)
+## [1] 0 1 2 3 4 5
+print(l$counts)
+## [1] 2 1 1 0 2
+Normalverteilte Zufallszahlen, deren Bereich vollständig innerhalb
+von min und max liegt (keine Warnung):
set.seed(42)
+x = rnorm(100, mean = 0, sd = 1)
+l = myhistogram(x, n = 8, min = -4, max = 4)
+print(l$borders)
+## [1] -4 -3 -2 -1 0 1 2 3 4
+print(l$counts)
+## [1] 0 4 11 31 37 15 2 0
+print(sum(l$counts)) # muss 100 ergeben
+## [1] 100
+Nutzen Sie Ihre Funktion myhistogram und erzeugen Sie
+einen Barplot mit ggplot. Die x-Achse zeigt dabei die
+Mitte des Intervalls und die y-Achse die Anzahl der Elemente in
+dieser Klasse.
Tipp: Der Parameter stat von geom_bar ist
+wichtig.
Vervollständigen Sie den Chunk. Die Kommentare sollen zu Anweisungen +umgewandelt werden:
+set.seed(1)
+x = rnorm(0, 1, n = 1000)
+# h = myhistogram(x, n = 20)
+# ggplot() + ...
+