Speichern von Objekten verschiedenen Datentyps
neun <- 9
dezimalzahl <- 1.75
zeichen <- "a"
zeichenkette <- "Hallo Welt"
logisch <- TRUE
logisch2 <- FALSE
Data Science 1 - Programmieren & Visualisieren
Saskia Otto & Monika Eberhard
Universität Hamburg, IMF
Wintersemester
![]()

Zur Erinnerung
Eine Variable ist eine Möglichkeit, um im Programm eine Zahl, ein Zeichen oder eine Zeichenkette oder einen booleschen Wert (wahr oder falsch) zu speichern.
Begriffe in R
Objekte werden gespeichert, indem man sie einem Namen zuweist - und zwar mit dem Zuweisungsoperator <-:
Hier wird jeweils nur ein einzelner Wert gespeichert. Auch so ein Objekt nennt man in R bereits einen Vektor (mit einem Element) – dazu gleich mehr!
Über den Namen kann auf den Inhalt zugegriffen werden:

Einzelne Objekte lassen sich mit rm() aus dem Arbeitsbereich löschen, ls() listet alle Objekte auf:
[1] "dezimalzahl" "drei" "logisch" "logisch2" "neun"
[6] "timer" "zeichen" "zeichenkette"
[1] "dezimalzahl" "drei" "logisch" "logisch2" "neun"
[6] "timer" "zeichenkette"
→ zeichen ist nicht mehr gelistet.
| Datentyp | Definition | Variablentyp | Skalenniveau |
|---|---|---|---|
| logical | Logische (Boolean) Werte (TRUE oder FALSE) |
kategorial | nominalskaliert |
| integer | Ganze Zahlen (z.B. Anzahlen) | quantitativ (diskret) | intervall-/verhältnisskaliert |
| double | Gleitkommazahlen (Dezimalzahlen) | quantitativ (kontinuierlich) | intervall-/verhältnisskaliert |
| character | Zeichen (oder Zeichenkette) | qualitativ/kategorial | nominalskaliert |
typeof()is.xxx()Diese Funktionen geben ein TRUE oder FALSE zurück:
as.xxx()![]()
![]()
![]()
![]()
Bevor auf my_value in Zeile 2 zugegriffen werden kann, muss das Objekt erst angelegt werden. Dies geschieht mit dem Zuweisungsoperator (<-).
Anschließend muss eine Funktion aufgerufen werden, die einen logischen Wert zurückgibt. Dies kann nur eine der is.xxx Funktionen sein. Welchen Datentyp könnte ‘A1’ haben?

c() zu einem Vektor zusammen. Die Elemente werden durch Kommas getrennt.c() verschachtelt: [1] 1 2 5 6 7 8 9 10 15 15 15 15 20 21
length() und str() ermittelt werden können:![]()
![]()
![]()

Implizite Datentyp-Umwandlung (‘coercion’)
Rechnen mit Einzelwerten und Vektoren (‘recycling’)
Namen für Elemente in Vektoren
Extrahieren von Elementen bzw. Teilmengen bilden (Indexierung oder ‘indexing’)
Achtung
→ Was sich nicht umwandeln lässt, wird zu NA - und R gibt eine Warnung aus. Warnungen also immer lesen!
TRUE zu einer 1 und FALSE zu 0.sum() und mean() sehr nützlich sein:Achtung bei Vektoren unterschiedlicher Länge
R recycelt auch längere Vektoren - das ist aber fast immer ein Versehen. R warnt nur, wenn die längere Länge kein Vielfaches der kürzeren ist:
c():names() lassen sich die Namen abfragen – und auch nachträglich vergeben:Dasselbe Prinzip begegnet Ihnen später wieder: names() zeigt z.B. auch die Spaltennamen einer Tabelle an.
[...] ist die Funktion mit der Vektoren indexiert werden.neuer_vektor <- alter_vektor[auswahl].Ausschluss von Elementen
Die Positionsangabe erfolgt über eine Ganzzahl oder einen numerischen Vektor mit Ganzzahlen. Der Index startet immer mit 1.
Vektor[Abfrage]) mittels Vergleichs- und Verknüpfungsoperatoren oder Funktionen, die auch TRUE/FALSE zurückgeben:NA angezeigt (= ‘not available’).NA nimmt immer den Datentyp der anderen Elemente an, auch wenn das meist nicht sichtbar ist.is.na() kann geprüft werden, ob ein Element ein NA ist - und mit sum() lässt sich anschließend die Anzahl aller NAs ermitteln.na.rm = TRUENA, ist auch das Ergebnis von sum(), mean(), max() etc. NA - denn der fehlende Wert könnte alles sein.na.rm = TRUE (‘NA remove’) werden NAs bei der Berechnung ignoriert:Prüfen Sie trotzdem immer erst, wie viele NAs es gibt (sum(is.na(x))) - 2 fehlende von 100 Werten sind etwas anderes als 80 von 100!
![]()
![]()
![]()
![]()
Ein Vektor x enthält 20 verschiedene Elemente.


Vergleichs- und Verknüpfungsoperatoren geben immer einen logischen Wert (TRUE oder FALSE) zurück.

| Operator | Anwendung | Beschreibung |
|---|---|---|
| < | a < b | a ist KLEINER als b |
| > | a > b | a ist GRÖSSER als b |
| == | a == b | a ist GLEICH wie b |
| <= | a <= b | a ist KLEINER als oder GLEICH wie b |
| >= | a >= b | a ist GRÖSSER als oder GLEICH wie b |
| != | a != b | a ist NICHT GLEICH wie b |
| %in% | a %in% b | a ist ENTHALTEN IN b |

| Operator | Anwendung | Beschreibung |
|---|---|---|
| & | a & b | Elementweise UND Operation (arbeiten mit Vektoren) |
| | | a | b | Elementweise ODER Operation (arbeiten mit Vektoren) |
| ! | !a | Elementweise NICHT Operation (arbeiten mit Vektoren) |

%in%-Operator== mit | verknüpft):
Warum 4 Werte???
Berechnungen in R sind vektorisiert, d.h. die Berechnung wird auf jedes einzelne Element des Vektors angewendet.
Gegeben ist eine Messreihe der Spinnendichte (\(no./m^2\)) auf verschiedenen Inseln im Golf von Kalifornien aus dem Jahre 1992 (aus Studie von Polis et al., 1998).

Nun soll der proportionale Anteil der Dichte pro Insel berechnet werden: \(p_i=\frac{d_i}{\sum(d_i)}\)


![]()

… im swirl-Kurs werden Sie direkt an die Hand genommen und Stück für Stück angeleitet.
Dann testen Sie doch Ihr Wissen in folgendem Abschlussquiz…
![]()
![]()
Das Objekt n in der letzten Operation wurde vorher nicht definiert. Daher muss sich die vorherige Zuweisung auf dieses Objekt beziehen. Auch y wurde vorher nicht definiert, daher kann es sich beim ‘Kleiner’-Zeichen in der letzten Zeile nicht um einen Vergleichsoperator handeln, sondern muss der erste Teil des Zuweisungsoperators sein.
Eine Zeichenkette (in diesem Fall ‘a’) hat keine korrespondierende Zahl, in die sie umgewandelt werden kann. Dagegen kann eine Zahl einfach in eine Zeichenkette umgewandelt werden.
‘<0.5’ ist keine Zahl und kann daher nicht umgewandelt werden - dieses Element wird zu NA, alle anderen werden korrekt umgewandelt. R gibt dabei eine Warnung aus (‘NAs introduced by coercion’). Solche Einträge (z.B. Werte unter der Nachweisgrenze) sind in Messdaten häufig und müssen bewusst behandelt werden.
Alle TRUEs werden zu 1 umgewandelt und alle FALSEs zu 0. Summiere einfach den Vektor mit der sum() Funktion: sum(x)
Wie könnten alle NAs in einem Vektor x mit sehr vielen Elementen schnell ermittelt werden?
Zuerst wird mit der is.na() Funktion bei jedem Element abgefragt, ob es sich um ein NA handelt oder nicht.
Anschließend kann mit dem zurückgegebenen logischen Vektor die Summe aller TRUEs berechnet werden - denn R wandelt bei mathematischen Operationen von logischen Werten alle FALSEs in eine 0 um und alle TRUEs in eine 1!
Ein Vektor x enthält 20 verschiedene Elemente.
Ein Vektor x enthält 20 verschiedene Elemente.
Ein Vektor vec enthält mehrere Zahlen.
Wir nutzen dazu den Modulo-Operator, welcher eine Restwert-Division zweier Elemente ausführt. Bei der Restwert-Division von 43 (Dividend) durch 5 (Divisor) wird z.B. gefragt, wie man die Zahl 43 als Vielfaches von 5 und einem kleinen Rest darstellen kann: \(43=5*c+r\) In diesem Beispiel wäre die 8 der sog. Ganzzahlquotient c und die 3 der Restwert r.
Ein Rest ungleich 0 ergibt sich folglich genau dann, wenn der Dividend kein Vielfaches des Divisors ist. Man sagt auch: Der Dividend ist nicht durch den Divisor teilbar, weshalb ein Rest übrigbleibt.
Dies können wir uns zunutze machen, indem wir als Divisor die 2 nehmen. Wenn kein Restbetrag übrig bleibt, muss der Dividend gerade sein!
Ein Vektor vec enthält mehrere Zahlen.
Ein numerischer Vektor nvec enthält eine unbekannte Anzahl an Elementen.
%in%%in% prüft für jedes Element in arten, ob es in c('Kabeljau', 'Scholle') enthalten ist, und gibt einen logischen Vektor zurück. Mit == würde R die beiden Vektoren dagegen elementweise (und mit Recycling!) vergleichen - das liefert hier ein falsches Ergebnis.
[1] FALSE TRUE FALSE TRUE FALSE
[1] "Kabeljau" "Scholle"
Warning in arten == c("Kabeljau", "Scholle"): longer object length is not a
multiple of shorter object length
[1] "Scholle"
Zur Erinnerung die Formel der Varianz: \(s^{2} = \frac{\sum\limits_{i=1}^{n} \left(x_{i} - \bar{x}\right)^{2}} {n-1}\)
df im Quiz steht für ‘degrees of freedom’, was im Deutschen die Freiheitsgrade sind. Und die betragen bei der Varianz n-1 (die Stichprobengröße oder Länge des Vektors minus 1).
Bei der Teilanweisung x-mean_x wird der eine Wert in mean_x auf die Länge von x recycelt. Anschließend wird der Wert in mean_x vom 1. Wert in x abgezogen, dann vom 2. Wert, etc.
Das Ergebnis ist ein Vektor der gleichen Länge wie x mit den Differenzen, die anschließend quadriert und aufsummiert werden.
[1] 1268.611
Bei weiteren Fragen: saskia.otto(at)uni-hamburg.de

Diese Arbeit ist lizenziert unter einer Creative Commons Attribution-ShareAlike 4.0 International License mit Ausnahme der entliehenen und mit Quellenangabe versehenen Abbildungen.
Kurswebseite: Data Science 1