Mathe mit Vektoren

Mit Vektoren zu rechnen ist genauso einfach wie im Kapitel 5.1. Number.

Plus +, Minus -, Geteilt /, Mal *, Hoch ^, Modulus %% alles können wir auch mit zwei oder mehreren Vektoren benutzen.

a <- c(1, 2, 3)
b <- c(4, 5, 6)

Plus +

a + b  # Console: [1] 5 7 9

Minus -

a - b  # Console: [1] -3 -3 -3

Geteilt /

a / b  # Console: [1] 0.25 0.40 0.50

Mal *

a * b  # Console: [1] 4 10 18

Hoch ^

a ^ b  # Console: [1] 1 32 729

Modulus %%

b %% a  # Console: [1] 0 1 0

Siehe im Kapitel 5.1 wie der Modulus Operator funktioniert.

Rechnen mit Zahlen

Wir können auch ohne Probleme einen Vektor plus, minus, geteilt, usw. einer Zahl nehmen, dann wird jede Zahl im Vektor mit der anderen Zahl verrechnet.

a + 2  # Console: [1] 3 4 5
a / 2  # Console: [1] 0.5 1.0 1.5

Rechnen mit unterschiedlich langen Vektoren

Wenn wir zwei Vektoren, die unterschiedlich lang sind, miteinander verrechnen, dann passiert etwas komisches:

c(1, 2, 3, 4) + c(1, 2)  # Console: [1] 2 4 4 6

Was wir hier sehen können ist, dass R automatisch den zweiten Vektor verlängert hat. Aus c(1, 2, 3, 4) + c(1, 2) wurde c(1, 2, 3, 4) + c(1, 2, 1, 2).

Wenn wir zwei unterschiedlich lange Vektoren in R miteinander verrechnen, sei es plus, minus, geteilt usw., dann wird automatisch der kürzere Vektor verlängert damit beide Vektoren gleich lang sind.

Dabei muss einer der beiden Vektoren das gerade Vielfache des anderen sein, sonst bekommen wir einen Error:

vec1 <- c(1, 2, 3)
vec2 <- c(1, 2, 3, 4)
vec1 + vec2
Warning message:
In vec2 + vec1 :
  longer object length is not a multiple of shorter object length

Einfache Zahl vs. Zahlen-Vektor

Schauen wir einmal hinter den Kulissen, warum sich Zahlen und Vektoren bei mathematischen Berechnungen nicht unterscheiden.

In R ist jeder Wert und jede Variable, die wir erstellen gleichzeitig auch ein Vektor. Zum Beispiel wenn wir eine Variable erstellen mit der Zahl 420, dann haben wir auch einen Vektor mit nur einem Wert erstellt.

x <- 420
is.numeric(x)  # Console: [1] TRUE
is.vector(x)   # Console: [1] TRUE

Die Funktion is.numeric und is.vector zeigt uns, dass x eine Zahl und auch ein Vektor ist. Jetzt wo wir wissen, dass x ein Vector ist, können wir doch bestimmt auch die [] Klammern benutzen, oder nicht? Richtig!

x[1]  # Console: [1] 420
x[2]  # Console: [1] NA

Und wenn wir im Kopf behalten, dass R automatisch versucht die Länge des kürzeren Vektors dem anderen anzupassen, bekommen wir ein Einblick wie R c(1, 2, 3) + 1 hinter den Kulissen berechnet wird:

# Aus:
c(1, 2, 3) + 1

# wird:
c(1, 2, 3) + c(1, 1, 1)

Übung: Rechnen mit Vektoren

Ich habe meine gesamten Einnahmen und Ausgaben im letzen Jahr aufgezeichnet und möchte jetzt berechnen, ob ich über meine Verhältnisse gelebt habe oder doch etwas sparen konnte.

MonatEinnahmenAusgaben
Januar14501200
Februar13001100
März15001800
April14502000
Mai14501000
Juni15001895
Juli16001500
August14002000
September14501800
Oktober14501200
November15001200
Dezember21001500

Lass uns diese Tabelle in R-Code übersetzen:

income <- c(1450, 1300, 1500, 1450, 1450, 1500, 
            1600, 1400, 1450, 1450, 1500, 2100)
expenses <- c(1200, 1100, 1800, 2000, 1000, 1895, 
              1500, 2000, 1800, 1200, 1200, 1500)

Um jetzt herauszufinden in welchen Monat ich plus oder minus gemacht habe, kann ich income - expenses nehmen.

income - expenses  # Console: [1] 250 200 -300 -550 450 -395 100 -600 -350 250 300 600

sum

Das gibt mir schonmal einen groben Eindruck, ob ich plus oder minus im letzten Jahr gemacht habe, aber wie viel genau? Die sum Funktion gibt uns die Summe aller Werte eines numerischen Vektors:

sum(income - expenses)  # Console: -45

Ich habe wohl doch nicht so gut gespart, wie ich erst gedacht habe...

median

Mit der median Funktion können wir herausfinden was der Durchschnitt meiner Einnahmen und Ausgaben war.

median(income)    ## Console: [1] 1450
median(expenses)  ## Console: [1] 1500

Wie wir sehen habe ich letztes Jahr im Durchschnitt pro Monat 1450 EUR verdient, aber 1500 EUR ausgegeben...