start exercise 1 from first testat
parent
f49f36a707
commit
dcf0d99797
|
|
@ -0,0 +1,118 @@
|
|||
---
|
||||
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() + ...
|
||||
```
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,15 @@
|
|||
myhistogram = function(x, min, max) {
|
||||
if (missing(min)){
|
||||
|
||||
}
|
||||
if (missing(max)){
|
||||
|
||||
}
|
||||
|
||||
list(borders=c(), counts=c())
|
||||
}
|
||||
|
||||
x = seq(-5, 6, by = 1 / 3)
|
||||
l = myhistogram(x)
|
||||
print(l$borders)
|
||||
print(l$counts)
|
||||
Binary file not shown.
Loading…
Reference in New Issue