#---
# Vektoren
#---
#---
# Erzeugung von Vektoren
#--- x<-c(1,2,3,4,5) # 'c' kommt von concatenate
x
y-exp(x)-2 # 'exp' wird auf jedes Element von x angewendet.
y
y[2] # zweites Element von y
y[2]<-1 # Ändern des zweiten Elemnents von y
#---
# Möglichkeiten, verschiedene Arten von Vektoren zu erzeugen
#--- rep(1,5) # Wiederholung
1:5 # das Gleiche wie c(1,2,3,4,5) 7:3 # das Gleiche wie c(7,6,5,4,3) seq(1,20,by=4) # Folge mit Abstand by=4
seq(1,20,length=5) # Folge mit legth=5 Elementen # in gleichen Abständen
rep(seq(5,1,by=-2),3) # drei malige Wiederholung der # Folge 5 3 1
#---
# verschiedene Wege, um auf Elemente von Vektoren zuzugreifen
#--- x<-1:30/10
length(x) # Anzahl der Elemente von x
x[1:10] # die ersten zehn Elemnente von x x[c(1,10,15)] # die Elemente an Position 1, 10, 15
x[c(10,1,15)] # die gleichen Elemente in anderer Reihenfolge x[x>2.5] # alle Elemente von x, die > 2.5 sind
x>2.5 # Vektor von Wahrheitswerten
x[-(1:10)] # alle Elemente außer den Elementen 1 bis 10 x<-c(1,5,3) # die Elemente des Vektors können auch
names(x)<-c("Cola","Wasser","Bier") # einen Namen haben x
x["Wasser"] # Element mit Namen Wasser oder mit x[2]
#---
# Rechnen mit Vektoren
#--- x<-c(1,2,3,4,5) # 'c' kommt von concatenate
exp(x)-2 # 'exp' wird auf jedes Element von x angewendet.
y<-1:10
x+y # geht nur falls die Länge des einen Vektors ein # vielfache der Länge des anderen Vektors ist x+c(1,2,3) # geht nicht
#---
# Vektoren können von von einem beliebigen Datentyp sein,
# dieser muss aber für alle Elemente innerhalb eines Vektors
# der Selbe sein.
1/4
#--- x<-1:3
typeof(x) # Datentyp von x wird bestimmt y<-TRUE
typeof(y) # Datentyp von y wird bestimmt z<-"Wasser"
typeof(z) # Datentyp von z wird bestimmt a<-c(x,y)
a
typeof(a) # der selbe Datentyp in a ist integer b<-c(x,y,z)
b
typeof(b) # der selbe Datenty in b ist charakter
#---
# Matrizen
#---
#---
# Erzeugung von Matrizen
#--- x<-c(1,2,3,4)
matrix(x,nrow=2,ncol=2) # Elemente spaltenweise geordnet matrix(x,2,2,byrow=T) # Elemente zeilenweils angeordnet A<-matrix(1:15,3)
A
B<-matrix(1:3,3,5) B
#---
# Matrizenoperationen
#--- A+B # elementweise Summe
A*B # elementweise Multiplikation
A%*%t(B) # Matrixprodukt, t(B) ist transponierte Matrix B
#---
# Zugriff auf Matrizen und Dimensionen
#--- dim(B) # Dimension (Anzahl der Zeilen bwz. Spalten)
nrow(B) # Zeilenanzahl ncol(B) # Spaltenanzahl A[,1] # erste Spalte A[1,] # erste Zeile
A[3,1] # erstes Element der dritten Zeile A
# die Zeilen erhalten Namen:
dimnames(A)<-list(c("1.Zeile","2.Zeile","3.Zeile"),NULL) A
A["1.Zeile",] # das Gleiche wie A[1,]
#---
# Zusammenfassen von Vektoren zu Matrizen
#--- cbind(c(1,2),c(3,4)) # Spaltenweise
rbind(c(1,2),c(3,4)) # Zeilenweise
2/4
#---
# Arrays
#---
#---
# Erzeugung von Array
#---
# Array können mehr als zwei Dimensionen haben A<-array(1:12,dim=c(3,2,2))
dim(A) A
# Ansonsten sind Arrays ähnlich zu Vektoren und Matrizen B<-A^2
B A+B
#---
# der Datensatz iris3 ist ein array
#--- is.array(iris3)
dim(iris3) # Datensatz iris3 hat 3 Dimensionen # 1. Dimension: jeweils 50 Werte # 2. Dimension: jeweils 4 Merkmale
# 3. Dimension: 3 Arten von Schwertlilien
iris3[,,"Versicolor"] # Daten Verschiedenfarbigen Schwertlilien iris3[,"Petal L.","Setosa"] # Blütenblattlängen
# bei Borsten-Schwertlilien (Setosa)
#---
# Listen
#---
#---
# Erzeugung von Listen
#--- # Listen sind nützlich, um Informationen
# verschiedenen Typs zusammenzufassen
# Die einzelnen Listeneinträge können Namen haben course.info<-list(students=c("Sandra","Karl","Thomas","Nadine"), nr.of.exercises = 15,rooms=c("MIB-1113","PRÜ-1104"))
# 1.Listeneintag ein character-Vektor # 2.Listeneintag eine Zahl
# 3.Listeneintag ein Character-Vektor
course.info$rooms # Listeneintrag mit Namen rooms course.info[[3]] # 3. Listeneintag
course.info$students[2] # 2. Elemtent vom Listeneintag mit Namen students
x<-list(Zahlen=c(1,5,3),Buchstaben=c("a","z"),c(1,"a",5,"z",3)) # Hier ist das erste Elemenelement ein Integer-Vektor und das # zweite (und dritte) ein Character-Vektor
# Beachte: nur die ersten zwei Einträge haben Namen
x[[1]] # Liefert das erste Listenelement, also den Vektor Zahlen
x[1] # Gibt eine Liste zurück, die nur aus dem 1. Eintrag von x besteht # Das wird (fast) nie gebraucht, hier nur erwähnt, falls man mal # die 2. Klammer vergisst.
x[[1]][2] # Zweites Element des ersten Listeneintags x$Zahlen[2] # das Gleiche wie x[[1]][2]
3/4
#---
# Listen als Rückgabewert von Funktionen in R
#---
# Viele in R implementierte Funktionen haben Listen als Rückgabewert
#---
# Ergebnis der Funktion eigen ist eine Liste
#--- A<-matrix(c(1,2,2,5),ncol=2)
A
erg<-eigen(A) is.list(erg)
length(erg) # Die Funktion eigen liefert eine Liste mit 2 Einträgen
erg[[1]] # Das erste Listenelement ist ein Vektor mit allen Eigenwerten erg$values # das Gleich wie erg[[1]]
erg[[2]] # Das zweite Listenelement ist eine Matrix mit den Eigenvectoren erg$vectors # das Gleich wie erg[[2]]
#---
# Data Frames
#---
# Ein data.frame ist eine Kombination aus Liste und Vektor. Es ist eine Lis
# die Vektoren der gleichen Länge aber mit unterschiedlichen Objekten als
# Elementen enthält. Es istt vielleicht der wichtigste Datentyp in R.
#---
# Erzeugung von Data Frames
#---
x<-data.frame("Gewicht"=c(65,75),"Groesse"=c(168,175),"Geschlecht"=c("w","m")) x
Alter<-c(22,45)
y<-cbind(x,Alter) # cbind hängt eine Spalte an, nicht c() verwenden!
y
#---
# Zugriff auf Data Frames
#---
# Der Zugriff ist wie bei Listen
y$Gewicht # Liefert den Vektor "Gewicht"
y[y$Gewicht<70,] # Liefert alle Zeilen (als data.frame), in denen # der Wert der Spalte "Gewicht" kleiner als 70 ist
#---
# Speichern und laden von Data Frames
#---
write.table(y,"D:\\data.txt") # Speichert den data.frame y als Textdatei rm(y) # y wird gelöscht
y
# Das gespeicherte data.frame wird wieder geladen y<-read.table("D:\\data.txt") # und gleich y zugeordnet
y
#---
# Der Datensatz iris liegt als data.frame vor is.data.frame(iris)
iris
4/4