Wenn man R startet, beginnt man eine Session. Man beendet eine Session mit
q()
(Hier die Frage ‘Save workspace image’ mit ‘cancel’ beantworten.)
Sie sollten stattdessen RStudio benutzen. RStudio ist eine grafische Benutzeroberfläche für R. Sofern R installiert ist, öffnet RStudio R in einem “console” genannten Sub-Fenster. Außerdem gibt es ein Sub-Fenster für R-Skripte (Textdokumente, die R-Code enthalten); daneben gibt es noch zwei weitere Sub-Fenster, die u.a. für die Darstellung von von uns erstellten Abbildungen dienen (dazu später mehr).
Jede Zeile mit ‘#’ davor wird von R ignoriert. Dies dient dem Kommentieren Jede Zeile ohne ‘#’ davor kann von RStudio ausgeführt werden, wenn der Cursor in dieser Zeile ist und Sie rechts oben auf “Run” klicken, z.B.:
help()
Alternativ dazu können Sie den Code auch zu R schicken, indem Sie auf Code –> Run selected line(s) anklicken; dort sehen Sie auch den keybord-shortcut, der genau das gleiche macht (und den Sie besser auswendig lernen).
Wie Sie an dem help()-Beispiel bemerkt haben werden, können Sie in einem der Sub-Fenster nun den Hilfetext zu help()
lesen. Das wird später wichtig, wenn wir uns über die Syntax eines Befehls informieren wollen.
Zunächst jedoch Grundlegendes zu R:
Ein neues Objekt wird mit ‘=’ (assign) oder ‘<-’ erzeugt. Es gibt numerische Objekte…
x = 3
y <- 4
ls()
## [1] "x" "y"
…und auch Schriftzeichen-Objekte in ""
:
z = "etwas"
Wenn Sie den Inhalt des Objektes sehen wollen, müssen Sie einfach den Objekt-Namen eingeben:
x
## [1] 3
Neue Objekte erzeugen mit dem selben Inhalt:
x = y = z = 4
Objekte werden in R gleich überschrieben ohne Warnmeldung:
y = 4
y
## [1] 4
y ="Phonetik"
y
## [1] "Phonetik"
Was ist das für ein Objekt?
class(x)
## [1] "numeric"
class(y)
## [1] "character"
c()
-FunktionNumerischer Vektor ‘x’ mit 6 Elementen:
x = c(3, 4, 6, 89.3, 0, -10)
x
## [1] 3.0 4.0 6.0 89.3 0.0 -10.0
Schriftzeichen-Vektor mit 4 Elementen:
labs = c("E", "A", "E", "i:")
labs
## [1] "E" "A" "E" "i:"
x[2] # Element 2 von x
## [1] 4
x[2:4] # Elemente 2 bis 4
## [1] 4.0 6.0 89.3
x[c(1,4)] # Elemente 1 und 4
## [1] 3.0 89.3
x[-2] # Alle Elemente außer Element 2
## [1] 3.0 6.0 89.3 0.0 -10.0
x[2:4] = 0 # Elemente 2 bis 4 auf 0 setzen
x[2:4]
## [1] 0 0 0
Alle Elemente von ‘x’ ohne den 2en und 5en?
Elemente von ‘x’ in der anderen Reihenfolge (also von 6 bis 1)?
*
, /
, +
, -
, …)a = c(10, 4, 20)
a * 10
## [1] 100 40 200
b = c(5, 2, 7)
a + b
## [1] 15 6 27
Weitere mathematische Operatoren wären z.B.:
sum(a) # Summe aller Elemente
## [1] 34
sqrt(a) # Wurzel pro Element
## [1] 3.162278 2.000000 4.472136
a^3 # Jedes Element hoch 3
## [1] 1000 64 8000
log(a) # Logarithmus eines jeden Elements
## [1] 2.302585 1.386294 2.995732
exp(a) # Exponential für jedes Element
## [1] 2.202647e+04 5.459815e+01 4.851652e+08
length()
, seq()
, rep()
, unique()
, table()
length()
:y = c("i", "i", "a", "a", "E", "E", "E", "E", "U")
length(y)
## [1] 9
Wie könnte man das letzte Element von ‘y’ listen?
Das vorletzte?
Das Vorletzte und Letzte zusammen?
seq()
:seq(10, 20, length=5) # 5 Intervalle zwischen 10 und 20
## [1] 10.0 12.5 15.0 17.5 20.0
seq(10, 20, by=1.5) # In Intervallen von 1.5
## [1] 10.0 11.5 13.0 14.5 16.0 17.5 19.0
rep()
:a = c(10, 4, 20)
rep(a, 4)
## [1] 10 4 20 10 4 20 10 4 20 10 4 20
rep(a, each=2)
## [1] 10 10 4 4 20 20
unique()
y = c("i", "i", "a", "a", "E", "E", "E", "E", "U")
unique(y)
## [1] "i" "a" "E" "U"
table()
table(y)
## y
## a E i U
## 2 4 2 1
Einlesen:
pfadu = "http://www.phonetik.uni-muenchen.de/~jmh/lehre/Rdf"
ai = read.table(file.path(pfadu, "ai.txt"))
Eigenschaften überprüfen:
ai
## F1 Kiefer Lippe
## 1 773 -25.47651 -24.59616
## 2 287 -27.02695 -26.44491
## 3 1006 -27.24509 -27.59161
## 4 814 -26.05803 -27.17365
## 5 814 -26.15489 -25.93095
## 6 806 -26.37281 -24.44872
## 7 938 -27.35341 -27.22650
## 8 1005 -27.98772 -28.26871
## 9 964 -26.27536 -27.05215
## 10 931 -26.09928 -26.54016
## 11 926 -26.40012 -26.83834
## 12 556 -25.73544 -27.21908
## 13 707 -25.84109 -23.44627
## 14 829 -26.37598 -25.23304
## 15 927 -27.47505 -27.64328
## 16 951 -26.68685 -25.63057
## 17 775 -25.79928 -23.68594
## 18 938 -27.18105 -25.28667
## 19 986 -27.75178 -27.70719
## 20 888 -25.99100 -26.84534
## 21 988 -26.27380 -28.26909
## 22 650 -26.50057 -24.31192
## 23 1026 -27.10303 -24.64248
## 24 992 -28.41081 -28.30641
## 25 896 -26.57372 -25.69383
# Was ist das für ein Objekt?
class(ai)
## [1] "data.frame"
# die ersten paar Reihen (oder Beobachtungen)
head(ai)
## F1 Kiefer Lippe
## 1 773 -25.47651 -24.59616
## 2 287 -27.02695 -26.44491
## 3 1006 -27.24509 -27.59161
## 4 814 -26.05803 -27.17365
## 5 814 -26.15489 -25.93095
## 6 806 -26.37281 -24.44872
# die letzten paar Reihen (oder Beobachtungen)
tail(ai)
## F1 Kiefer Lippe
## 20 888 -25.99100 -26.84534
## 21 988 -26.27380 -28.26909
## 22 650 -26.50057 -24.31192
## 23 1026 -27.10303 -24.64248
## 24 992 -28.41081 -28.30641
## 25 896 -26.57372 -25.69383
# Reihen und Spaltenanzahl
nrow(ai)
## [1] 25
ncol(ai)
## [1] 3
dim(ai)
## [1] 25 3
# Die Spaltennamen oder Variablen
names(ai)
## [1] "F1" "Kiefer" "Lippe"
# das gleiche
colnames(ai)
## [1] "F1" "Kiefer" "Lippe"
# wobei das "col" für "columns" steht
ai[m,]
= Reihe m
ai[,m]
= Spalte m
ai[2,]
## F1 Kiefer Lippe
## 2 287 -27.02695 -26.44491
ai[2:10,]
## F1 Kiefer Lippe
## 2 287 -27.02695 -26.44491
## 3 1006 -27.24509 -27.59161
## 4 814 -26.05803 -27.17365
## 5 814 -26.15489 -25.93095
## 6 806 -26.37281 -24.44872
## 7 938 -27.35341 -27.22650
## 8 1005 -27.98772 -28.26871
## 9 964 -26.27536 -27.05215
## 10 931 -26.09928 -26.54016
ai[c(2, 3, 8),]
## F1 Kiefer Lippe
## 2 287 -27.02695 -26.44491
## 3 1006 -27.24509 -27.59161
## 8 1005 -27.98772 -28.26871
# oder
vec = c(2, 3, 8)
ai[vec,]
## F1 Kiefer Lippe
## 2 287 -27.02695 -26.44491
## 3 1006 -27.24509 -27.59161
## 8 1005 -27.98772 -28.26871
ai[,2]
## [1] -25.47651 -27.02695 -27.24509 -26.05803 -26.15489 -26.37281 -27.35341
## [8] -27.98772 -26.27536 -26.09928 -26.40012 -25.73544 -25.84109 -26.37598
## [15] -27.47505 -26.68685 -25.79928 -27.18105 -27.75178 -25.99100 -26.27380
## [22] -26.50057 -27.10303 -28.41081 -26.57372
$Namen
auf die Spalten zugreifen:names(ai)
## [1] "F1" "Kiefer" "Lippe"
ai[,2]
:ai$Kiefer
## [1] -25.47651 -27.02695 -27.24509 -26.05803 -26.15489 -26.37281 -27.35341
## [8] -27.98772 -26.27536 -26.09928 -26.40012 -25.73544 -25.84109 -26.37598
## [15] -27.47505 -26.68685 -25.79928 -27.18105 -27.75178 -25.99100 -26.27380
## [22] -26.50057 -27.10303 -28.41081 -26.57372
# Beobachtungen 2 bis 10 von Variable 2
ai[2:10,2]
## [1] -27.02695 -27.24509 -26.05803 -26.15489 -26.37281 -27.35341 -27.98772
## [8] -26.27536 -26.09928
# oder
ai$Kiefer[2:10]
## [1] -27.02695 -27.24509 -26.05803 -26.15489 -26.37281 -27.35341 -27.98772
## [8] -26.27536 -26.09928
# oder
ai[2:10,"Kiefer"]
## [1] -27.02695 -27.24509 -26.05803 -26.15489 -26.37281 -27.35341 -27.98772
## [8] -26.27536 -26.09928
Reihen 2, 5, 8 von Variablen 2 und 3?
Reihen 12 bis 18 von Variablen 1 und 3?
[-n, ]
oder [,-n]
: alle außer n
# Alle Spalten außer Spalte 1
ai[,2:3]
# oder
ai[,-1]
## Kiefer Lippe
## 1 -25.47651 -24.59616
## 2 -27.02695 -26.44491
## 3 -27.24509 -27.59161
## 4 -26.05803 -27.17365
## 5 -26.15489 -25.93095
## 6 -26.37281 -24.44872
## 7 -27.35341 -27.22650
## 8 -27.98772 -28.26871
## 9 -26.27536 -27.05215
## 10 -26.09928 -26.54016
## 11 -26.40012 -26.83834
## 12 -25.73544 -27.21908
## 13 -25.84109 -23.44627
## 14 -26.37598 -25.23304
## 15 -27.47505 -27.64328
## 16 -26.68685 -25.63057
## 17 -25.79928 -23.68594
## 18 -27.18105 -25.28667
## 19 -27.75178 -27.70719
## 20 -25.99100 -26.84534
## 21 -26.27380 -28.26909
## 22 -26.50057 -24.31192
## 23 -27.10303 -24.64248
## 24 -28.41081 -28.30641
## 25 -26.57372 -25.69383
nrow()
:n = nrow(ai)
n
## [1] 25
Letzte Beobachtung (indem ‘n’ verwendet wird)?
Vorletzte Beobachtung (indem ‘n’ verwendet wird)?
Letzte 3 Beobachtungen (indem ‘n’ verwendet wird)?
(Angenommen, dass die Variablen vom Data-Frame numerisch sind):
class(ai[,1])
## [1] "integer"
# oder
class(ai$F1)
## [1] "integer"
class(ai[,2])
## [1] "numeric"
class(ai[,3])
## [1] "numeric"
20 von allen Werten abziehen:
ai - 20
## F1 Kiefer Lippe
## 1 753 -45.47651 -44.59616
## 2 267 -47.02695 -46.44491
## 3 986 -47.24509 -47.59161
## 4 794 -46.05803 -47.17365
## 5 794 -46.15489 -45.93095
## 6 786 -46.37281 -44.44872
## 7 918 -47.35341 -47.22651
## 8 985 -47.98772 -48.26871
## 9 944 -46.27536 -47.05215
## 10 911 -46.09928 -46.54016
## 11 906 -46.40012 -46.83834
## 12 536 -45.73544 -47.21908
## 13 687 -45.84109 -43.44627
## 14 809 -46.37597 -45.23304
## 15 907 -47.47505 -47.64328
## 16 931 -46.68685 -45.63057
## 17 755 -45.79928 -43.68594
## 18 918 -47.18105 -45.28667
## 19 966 -47.75178 -47.70719
## 20 868 -45.99100 -46.84534
## 21 968 -46.27380 -48.26909
## 22 630 -46.50057 -44.31192
## 23 1006 -47.10303 -44.64248
## 24 972 -48.41081 -48.30641
## 25 876 -46.57372 -45.69383
Variable 1 Mal 5:
ai[,1] * 5
## [1] 3865 1435 5030 4070 4070 4030 4690 5025 4820 4655 4630 2780 3535 4145
## [15] 4635 4755 3875 4690 4930 4440 4940 3250 5130 4960 4480
# oder
ai$F1 * 5
## [1] 3865 1435 5030 4070 4070 4030 4690 5025 4820 4655 4630 2780 3535 4145
## [15] 4635 4755 3875 4690 4930 4440 4940 3250 5130 4960 4480
neu = ai - 20
ai - neu
## F1 Kiefer Lippe
## 1 20 20 20
## 2 20 20 20
## 3 20 20 20
## 4 20 20 20
## 5 20 20 20
## 6 20 20 20
## 7 20 20 20
## 8 20 20 20
## 9 20 20 20
## 10 20 20 20
## 11 20 20 20
## 12 20 20 20
## 13 20 20 20
## 14 20 20 20
## 15 20 20 20
## 16 20 20 20
## 17 20 20 20
## 18 20 20 20
## 19 20 20 20
## 20 20 20 20
## 21 20 20 20
## 22 20 20 20
## 23 20 20 20
## 24 20 20 20
## 25 20 20 20
Der obige Befehl funktioniert, wenn die Dimensionen der Data-Frames/Matrizen gleich sind.
dim(ai)
## [1] 25 3
dim(neu)
## [1] 25 3
# daher auch
ai[1:3,2:3] / neu[10:12,1:2]
## Kiefer Lippe
## 1 -0.02796543 0.5335476
## 2 -0.02983107 0.5699319
## 3 -0.05083039 0.6032873
# da
dim(ai[1:3,2:3])
## [1] 3 2
# und
dim(neu[10:12,1:2])
## [1] 3 2
# gleich sind.
Dies hingegen funktioniert nicht:
ai[1:3,2:3] / neu[10:12,]
## Error in Ops.data.frame(ai[1:3, 2:3], neu[10:12, ]): '/' only defined for equally-sized data frames
ls() # Welche Objekte sind im Verzeichnis?
class() # was ist das für ein Objekt?
c() # Elemente in einen Vektor verbinden
x * 20
x / 20
x + 20
x - 20
x^2 #potenzieren (hier: quadrieren)
sqrt(x) #Quadratwurzel berechnen
sum(x) #Summe errechnen
...
length() # Wieviele Elemente in einem Vektor
seq() # Intervalle erzeugen
rep() # Elemente wiederholen
unique() # Type/Token listen
table() # Tabellieren
head() # Die ersten paar Reihen
tail() # Die letzten paar Reihen
nrow() # Anzahl der Reihen
ncol() # Anzahl der Spalten
dim() # Dimensionen (Reihen x Spalten)
names() # Variablen-Namen
levels() # Stufen einer Variable
x[2] # Element 2 von x
x[2:4] # Elemente 2 bis 4
x[c(1,4)] # Elemente 1 und 4
x[a,b] # Beobachtungen a von Variable b