Der Vektor
Ein Vektor ist eine geordnete Folge von Werten desselben Typs. Erzeugt wird er mit c() (combine):
zahlen <- c(4, 8, 15, 16, 23, 42)
namen <- c("Mia", "Tom", "Zoe")
logisch <- c(TRUE, FALSE, TRUE)
zahlen
length(zahlen)
zahlen[1] # Indizes beginnen bei 1!
zahlen[c(1, 3)]
zahlen[2:4]
zahlen[-1] # alles außer dem ersten
zahlen[zahlen > 10] # Filter mit Bedingung
rev(zahlen)
c(1, "a", TRUE) # gemischt: alles wird zu TextAusgabe
[1] 4 8 15 16 23 42 [1] 6 [1] 4 [1] 4 15 [1] 8 15 16 [1] 8 15 16 23 42 [1] 15 16 23 42 [1] 42 23 16 15 8 4 [1] "1" "a" "TRUE"
Folgen und Wiederholungen
1:10
seq(0, 1, by = 0.25)
seq(10, 100, length.out = 4)
seq_len(5); seq_along(c("a", "b"))
rep(c(1, 2), times = 3)
rep(c("a", "b"), each = 2)
numeric(3); character(2); logical(2)
vector("list", 2)Ausgabe
[1] 1 2 3 4 5 6 7 8 9 10 [1] 0.00 0.25 0.50 0.75 1.00 [1] 10 40 70 100 [1] 1 2 3 4 5 [1] 1 2 [1] 1 2 1 2 1 2 [1] "a" "a" "b" "b" [1] 0 0 0 [1] "" "" [1] FALSE FALSE [[1]] NULL [[2]] NULL
Vektorisierung
Rechenoperationen wirken auf jedes Element. Ist ein Vektor kürzer, wird er wiederholt (Recycling):
a <- c(1, 2, 3)
b <- c(10, 20, 30)
a + b
a * 2
a * b
a ^ 2
sqrt(a)
a + c(100, 200) # Recycling mit Warnung (Länge 3 vs 2)
sum(a); mean(b); prod(a); cumsum(a); diff(c(1, 4, 9))
max(b); min(b); range(b); which.max(b); which(b > 15)
a > 1
any(a > 2); all(a > 0)
ifelse(a > 1, "groß", "klein")Ausgabe
[1] 11 22 33 [1] 2 4 6 [1] 10 40 90 [1] 1 4 9 [1] 1.000000 1.414214 1.732051 [1] 101 202 103 [1] 6 [1] 20 [1] 6 [1] 1 3 6 [1] 3 5 [1] 30 [1] 10 [1] 10 30 [1] 3 [1] 2 3 [1] FALSE TRUE TRUE [1] TRUE [1] TRUE [1] "klein" "gro\303\237" "gro\303\237"
Statistik für Vektoren
x <- c(2, 4, 4, 4, 5, 5, 7, 9)
mean(x); median(x); var(x); sd(x)
quantile(x)
quantile(x, 0.9)
summary(x)
table(x)
sort(x, decreasing = TRUE)
order(c(3, 1, 2))
rank(c(10, 30, 20))
unique(x); duplicated(x); rev(sort(unique(x)))
cor(c(1, 2, 3, 4), c(2, 4, 5, 9))
scale(c(1, 2, 3))[, 1]
round(cumprod(c(1.1, 1.1, 1.1)), 3)Ausgabe
[1] 5
[1] 4.5
[1] 4.571429
[1] 2.13809
0% 25% 50% 75% 100%
2.0 4.0 4.5 5.5 9.0
90%
7.6
Min. 1st Qu. Median Mean 3rd Qu. Max.
2.0 4.0 4.5 5.0 5.5 9.0
x
2 4 5 7 9
1 3 2 1 1
[1] 9 7 5 5 4 4 4 2
[1] 2 3 1
[1] 1 3 2
[1] 2 4 5 7 9
[1] FALSE FALSE TRUE TRUE FALSE TRUE FALSE FALSE
[1] 9 7 5 4 2
[1] 0.9647638
[1] -1 0 1
[1] 1.100 1.210 1.331Benannte Vektoren und fehlende Werte
alter <- c(Mia = 17, Tom = 25, Zoe = 31)
alter["Tom"]
names(alter)
alter[alter > 20]
alter["Ben"] <- 9
alter
messung <- c(5, NA, 7, NA, 9)
mean(messung) # NA steckt an
mean(messung, na.rm = TRUE)
is.na(messung)
sum(is.na(messung))
messung[!is.na(messung)]
NULL
length(NULL)Ausgabe
Tom 25 [1] "Mia" "Tom" "Zoe" Tom Zoe 25 31 Mia Tom Zoe Ben 17 25 31 9 [1] NA [1] 7 [1] FALSE TRUE FALSE TRUE FALSE [1] 2 [1] 5 7 9 NULL [1] 0
NA steht für einen fehlenden Wert (not available), NaN für "keine Zahl" (0/0), Inf für unendlich, NULL für "nichts".
Typen und Umwandlung
class(c(1L, 2L)); class(c(1.5, 2)); class("a"); class(TRUE); class(NULL); class(NA)
as.integer("42") + 1L
as.numeric(c("1.5", "abc"))
as.character(123)
as.logical(c("TRUE", "false", "T", "ja"))
is.vector(1:3); typeof(1:3); typeof(c(1, 2)); object.size(1:10) > 0
0.1 + 0.2 == 0.3
isTRUE(all.equal(0.1 + 0.2, 0.3))
5L / 2L; 5L %/% 2L; .Machine$integer.maxAusgabe
[1] "integer" [1] "numeric" [1] "character" [1] "logical" [1] "NULL" [1] "logical" [1] 43 [1] 1.5 NA [1] "123" [1] TRUE FALSE TRUE NA [1] TRUE [1] "integer" [1] "double" [1] TRUE [1] FALSE [1] TRUE [1] 2.5 [1] 2 [1] 2147483647
Merke
- Vektoren per
c(),1:10,seq(),rep(); Indizes ab 1 - Indexieren mit Zahlen, negativen Zahlen, Namen und logischen Vektoren
- Rechnen wirkt elementweise (Vektorisierung), kurze Vektoren werden recycelt
- Kennzahlen:
mean,median,sd,quantile,summary,table NAfür fehlende Werte:na.rm = TRUE,is.na()
Aufgabe
Erzeuge die Zahlen 1 bis 20, wähle alle durch 3 teilbaren aus und berechne ihre Summe.