# Einführung in R -Vorlesung 1 # i) Zuordnung von Werten x<-5 #( oder x=5) print(x) #([1] 5) x<-complex(,3,2) print(x) #([1] 3+2i) x<-complex(5,3,2) print(x) #([1] 3+2i 3+2i 3+2i 3+2i 3+2i) print(x[3]) #([1] 3+2i) x<-as.numeric(precip) #(Datei in R, Struktur etwas später (Vektor mit Namen))) print(x) # [1] 67.0 54.7 7.0 48.5 14.0 17.2 20.7 13.0 43.4 40.2 38.9 54.5 59.8 48.3 22.9 # [16] 11.5 34.4 35.1 38.7 30.8 30.6 43.1 56.8 40.8 41.8 42.5 31.0 31.7 30.2 25.9 # [31] 49.2 37.0 35.9 15.0 30.2 7.2 36.2 45.5 7.8 33.4 36.1 40.2 42.7 42.5 16.2 # [46] 39.0 35.0 37.0 31.4 37.6 39.9 36.2 42.8 46.4 24.7 49.1 46.0 35.9 7.8 48.2 # [61] 15.2 32.5 44.7 42.6 38.8 17.4 40.8 29.1 14.6 59.2 # ii) Rechnen in R x x*2.54 #(multipliziert jede Komponente in x mit 2.54 (Umrechnung 'inch' in 'cm')) x<-x*2.54 print(x) # iii) Andere Operationen +,-,*,/,^ print(3^2) # iv) Umgang mit Vektoren x<-2:10 #(Vektor der Länge 9 mit Einträgen 2 bis 10) print(x) #([1] 2 3 4 5 6 7 8 9 10) print(x[5]) #(?) print(x*3) #(?) print(x^2) #([1] 4 9 16 25 36 49 64 81 100) y<-c(2,3,4) #('cat') Vektor mit Einträgen 2,3,4) print(x/y) #(?) z<-c(2,3,4,5) Z1<-z w<-x*z print(w) #(?) print(length(x)) #([1] 9) print(sum(x)) print(cumsum(x)) #([1] 2 5 9 14 20 27 35 44 54) m<-min(x) M<-max(x) print(m,M) #([1] 2) h<-c(m,M) print(h) #([1] 2 10) mean(x) #('Mittelwert des Vektors x') var(x) #('empirische Varianz von x') # oder sum((x-mean(x))^2/(length(x)-1)) # v) Zugriff auf Komponenten x[3] x[2:4] x[c(2,1,3)] x[-c(2,1,8)] #([1] 4 5 6 7 8 10) x<-rep(c(1,3,4),2) print(x) # ( [1] 1 3 4 1 3 4) sort(x) #(?) order(x) #(?) # vi) Namen x<-1:8 y<-letters[1:8] # 'LETTERS' erzeugt große Buchstaben names(x)<-y print(x) # vii) Umgang mit Matrizen x<-1:12 #(erst Vektor definieren) dim(x)<-c(3,4) # (in Matrix mit 3 Zeilen und 4 Spalten umsetzen) print(x) # [,1] [,2] [,3] [,4] # [1,] 1 4 7 10 # [2,] 2 5 8 11 # [3,] 3 6 9 12 # oder x<-matrix(1:12,nrow=3,byrow=FALSE) print(x) x<-matrix(1:12,nrow=4,byrow=TRUE) print(x) print(t(x)) y<-matrix(rep(1:4,2),nrow=4) print(y) dim(y) nrow(y) ncol(y) # Einzelaufrufe print(y[1,2]) print(y[,2]) # 2.Spalte print(y[1,]) # 1.Zeile # viii) Quadratische Matrizen A<-matrix(c(1,0,4,3),nrow=2,byrow=TRUE) print(A) print(det(A)) print(eigen(A)) #($values # [1] 3 1 # $vectors # [,1] [,2] # [1,] 0 0.4472136 # [2,] 1 -0.8944272 ) b<-c(1,0) solve(A,b) #(?) print(diag(c(1,3,5,2,4))) #(?) A<-matrix(1:12,nrow=3) x1<- 21:24 y1<- 15:17 y2<-c(2,5,10.1) print(rbind(A,x1)) # [,1] [,2] [,3] [,4] # 1 4 7 10 # 2 5 8 11 # 3 6 9 12 # x1 21 22 23 24 print(cbind(A,y1,y2)) #(?) # ix) Listen und Dataframes liste_beispiel<- list(Studiengänge=c("BA Math. Biometrie","BA Mathematik", "MA WiMa") ,Dozenten=c("Beyersmann", "Lanzinger", "Stadtmüller"), Noten=c(1,1.3,1.7,2.3,2.0, 3.3,3.7,4.0)) class(liste_beispiel) # '[1] "list" liste_beispiel # $Studiengänge # [1] "BA Math. Biometrie" "BA Mathematik" "MA WiMa" # # $Dozenten # [1] "Beyersmann" "Lanzinger" "Stadtmüller" # # $Noten # [1] 1.0 1.3 1.7 2.3 2.0 3.3 3.7 4.0 liste_beispiel[[1]] #(?) liste_beispiel[c(1,2)] #(?) liste_beispiel$Noten #(?) #Dataframes beinhalten eine Liste von Vektoren gleicher Länge, innerhalb einer Zeile stehen gleichartige Objekte tatort2013<-data.frame(Kurs=factor(c("A","A","A","A","A","A","A","A","A","A","A","A","A","A")), Geschlecht=factor(c( "M","M","M","M","M","M","M","M","M","M","W","W","W","W")), Tatort=c("N","N","N","J","N","J","J","N","N","N","J","N","N","N"),PersonA=c(32,35,32,34,39,37,32,32,32,31,34,27,32,26), PersonB=c(55,55,56,53,58,53,55,48,45,48,48,55,55,49), PersonC=c(47,52,52,49,48,42,47,40,38,48,47,42,35,45), PersonD=c(50,47,50,52,55,52,48,54,55,55,53,50,47,61) ) print(tatort2013) #Ein-/Auslesen aus Datei getwd()#working directory abfragen. setwd("C:/Users/User/Documents") #wd setzen write.table(tatort2013,file="demofile") tatort2013_2<-read.table(file="demofile") #zur Matrix zusammenbinden. tatort2013_21=cbind(tatort2013[[4]],tatort2013[[5]],tatort2013[[6]],tatort2013[[7]]) #Schleifen und Konditionalabfragen x<-1:10 y<-c(1,2,1,2,1,1,1,2,2,2) x>5 x[x>5] x[x>2 & x<8] x[x<3 | x>8] x[y==2] #If-Else Abfrage vec=seq(1,12,by=1) if(length(vec)==12){ print("vec hat genau die Länge 12") }else{ print("vec hat nicht die Länge 12") } #Logische Operatoren sind && für Und sowie || für Oder if(length(vec)==12 && vec[1]==3){ cat("vec hat genau die Länge 12 und erster Eintrag ist 3") }else{ print("vec hat nicht die Länge 12 und/oder erster Eintrag ungleich 3") } #for-Schleife z<-rep(0,100) for(i in 1:100){ z[i]<-i^2; } 1:100*1:100 #while-Schleife n<-0;summe<-0; while(summe <= 1000){ n<-n+1 summe<-summe+n } sum(1:45) #Funktionen #Stichprobenmittel nachschreiben arithmittel<-function(x){return(sum(x)/length(x));} #Gibt die Geschlechter eines Tatorts aus. tatort<-function(x,y){ sub=subset(x,Tatort==y); return(sub$Geschlecht); } tatort(tatort2013,"N") tatort(tatort2013,"J") #Visualisierung/Grafiken in R #Geimeinsamer Plot 1 Zeile 2 Spalten par(mfrow=c(1,2)) x<-1:10 y<-x^2 #Einfach Punktepaare in Plot gegeneinander auftragen (Streudiagramm) plot(x,y) #Vielleicht etwas schöner plot(x,y,ylab="Quadrat",xlab="x-Achse",main="Quadratfunktion") #Quadratfunktion hinzuploten plot(function(x) x^2,add=T,xlim=c(0,10),ylim=c(0,100),col="red") #Winkelhalbierende (plot wird ergänzt) points(x,x) lines(x,x,col="red") #Plotte Dichte der Standardnormalverteilung plot(function(x) dnorm(x,0,1),xlim=c(-2,2),ylim=c(0,0.5),main="Standardnormalverteilung",xlab="x-Achse",ylab="Dichte") #Ergänze den Plot um ein Histogramm von simulierten Werten. hist(rnorm(100,0,1),freq=F,add=T) #Noch ganz nützlich die Hilfe help(rnorm)