cleanup: add merge solution PDF, move exercises to separate folder each, add gitignore and delete readme
parent
7084ce3a51
commit
e38f953019
423
.Rhistory
423
.Rhistory
|
|
@ -1,423 +0,0 @@
|
|||
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)
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
# Created by https://www.toptal.com/developers/gitignore/api/r
|
||||
# Edit at https://www.toptal.com/developers/gitignore?templates=r
|
||||
|
||||
### R ###
|
||||
# History files
|
||||
.Rhistory
|
||||
.Rapp.history
|
||||
|
||||
# Session Data files
|
||||
.RData
|
||||
.RDataTmp
|
||||
|
||||
# User-specific files
|
||||
.Ruserdata
|
||||
|
||||
# Example code in package build process
|
||||
*-Ex.R
|
||||
|
||||
# Output files from R CMD build
|
||||
/*.tar.gz
|
||||
|
||||
# Output files from R CMD check
|
||||
/*.Rcheck/
|
||||
|
||||
# RStudio files
|
||||
.Rproj.user/
|
||||
|
||||
# produced vignettes
|
||||
vignettes/*.html
|
||||
vignettes/*.pdf
|
||||
|
||||
# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3
|
||||
.httr-oauth
|
||||
|
||||
# knitr and R markdown default cache directories
|
||||
*_cache/
|
||||
/cache/
|
||||
|
||||
# Temporary files created by R markdown
|
||||
*.utf8.md
|
||||
*.knit.md
|
||||
|
||||
# R Environment Variables
|
||||
.Renviron
|
||||
|
||||
# pkgdown site
|
||||
docs/
|
||||
|
||||
# translation temp files
|
||||
po/*~
|
||||
|
||||
# RStudio Connect folder
|
||||
rsconnect/
|
||||
|
||||
### R.Bookdown Stack ###
|
||||
# R package: bookdown caching files
|
||||
/*_files/
|
||||
|
||||
# End of https://www.toptal.com/developers/gitignore/api/r
|
||||
Binary file not shown.
|
|
@ -1,160 +1,175 @@
|
|||
---
|
||||
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")
|
||||
|
||||
```
|
||||
---
|
||||
title: "Eigenes Histogramm"
|
||||
output:
|
||||
pdf_document: default
|
||||
html_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)
|
||||
|
||||
# sonst fällt max(x) wegen b_i <= z < b_{i+1} raus
|
||||
if (missing(max)) max <- base::max(x) + 10^-12
|
||||
|
||||
if (missing(n)) n <- 10
|
||||
|
||||
if (min >= max) {
|
||||
stop("min muss kleiner als max sein.")
|
||||
}
|
||||
|
||||
# Äquidistante Aufteilung der Eingabe in n Intervalle mit n + 1 Grenzen
|
||||
borders <- seq(min, max, length.out = n + 1)
|
||||
counts <- rep(0, n)
|
||||
|
||||
# Werte außerhalb des gewählten Intervalls ermitteln
|
||||
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){
|
||||
# Linke Grenze inklusive, rechte exklusive
|
||||
# Deswegen wurde oben auf max 10^-12 addiert
|
||||
if (value >= borders[i] && value < borders[i+1])
|
||||
{
|
||||
counts[i] <- counts[i] + 1
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
# Intervallgrenzen und absolute Häufigkeit zurückgeben
|
||||
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`
|
||||
|
||||
```{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)
|
||||
|
||||
# da max explizit gesetzt wird, fallen 5 und 7 aus den gütligen Grenzen raus
|
||||
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)
|
||||
# letzte und erste Grenze entfernen sodass nebeneinanderliegende Grenzen in den Vektoren
|
||||
# jeweils auf der gleichen Indexposition liegen. Man verschiebt die Grenzen also
|
||||
bins = (h$borders[-1]+h$borders[-length(h$borders)])/2
|
||||
|
||||
#print(h$borders[-1])
|
||||
#print(h$borders[length(-h$borders)])
|
||||
|
||||
print(h$borders)
|
||||
# Damit kann man die relative statt der absoluten Häufigkeit anzeigen
|
||||
count = h$counts #/sum(h$counts)
|
||||
|
||||
ggplot() +
|
||||
geom_bar(aes(x=bins, y=count), stat="identity")+
|
||||
labs(title="Histogramm für normalverteilte Daten", y="Absolute Häufigkeit", x="Intervalle")
|
||||
|
||||
print(h$counts)
|
||||
```
|
||||
File diff suppressed because one or more lines are too long
Binary file not shown.
Loading…
Reference in New Issue