#---------------------------------------------# # # # Einfuehrung zur R-Software: Rechnen # # mit Zahlen, Vektoren und Matrizen # # # #---------------------------------------------# 1) Installation von R: Sie koennen entweder das R auf den Hochschul- rechnern benutzen, dort ist es schon installiert, oder Sie instal- lieren das R direkt auf Ihrem Rechner, das ist vielleicht etwas praktischer. 1a) Wenn Sie die Hochschulcomputer von zu Hause aus benutzen wollen, geht das folgendermassen: i) Sie muessen zunaechst einmalig auf Ihrem Rechner eine sogenannte VPN-Client-Software installieren. Gehen Sie dazu auf die Seite https://www.hs-rm.de/de/service/it-und-medienzentrum/it-services/vpn#vpn-99141 und klicken Sie unter Downloads auf VPN-Client fuer Windows oder fuer MacOS, je nachdem, ob Sie einen Windows- oder Apple-Computer haben. Sie werden nach Username und password gefragt, das ist dasselbe wie bei Stud.IP (HDS-Username) ii) Wenn Sie dieses Check Point Mobile Programm aus Schritt (i) installiert haben, finden Sie, wenn Sie einen Windows10-Rechner haben, unten in der Taskbar so ein Vorhaengeschloss-Symbol und koennen dann durch Doppelklick eine VPN-Verbindung zur Hochschule herstellen. Also Sie tun das Programm starten, Sie werden nochmal nach Ihrem password gefragt. iii) Ueber die Seite https://www.am.hs-rm.de koennen Sie sich dann mit den Hochschul-PCs verbinden. Ihr Bildschirm sieht dann so aus wie der der Hochschul-PCs und Sie koennen dann die R-Software starten. 1b) Etwas einfacher ist es vielleicht, das R gleich auf Ihrem PC zu installieren. Gehen Sie dazu auf die VL-Homepage und klicken Sie ganz unten auf "Die R-Software kann hier heruntergeladen werden". Dann, wenn Sie etwa wie ich ein Windows-PC haben, "Download R for Windows" und dann "install R for the first time". Waehlen Sie am besten die Default-Einstellungen und beantworten Sie eventuelle Fragen nach dem Einrichten eines neuen Folders mit "Ja". Das Ganze ist dann in etwa in 1 bis 2 Minuten erledigt, auf meinen Geraeten habe ich da bisher noch keine Probleme gehabt. 2) Etwas Hintergrund zur R-Programmiersprache: Ein paar Auszuege von der Wikipedia-Seite https://de.wikipedia.org/wiki/R_(Programmiersprache) * R wurde von Statistikern fuer statistische Fragestellungen entworfen und geht somit direkt auf die Beduerfnisse ein, die fuer solche Zwecke benoetigt werden, wenige Zeilen Code sind notwendig fuer komplexe statistische Probleme. Aufgrund des unkomplizierten Vorgehens werden viele neue statistische Methoden als Erstes in R implementiert. * Zentrales Archiv fuer Pakete ist das Comprehensive R Archive Network (CRAN) mit Haupt-Server an der Wirtschaftsuniversitaet Wien und zahlreichen Spiegelservern. Es gibt ueber 10000 Pakete auf CRAN. * Unter der Rubrik Task Views https://cran.r-project.org/web/views/ enthaelt CRAN eine Liste von inzwischen 43 Themengebieten, fuer welche eine kommentierte Beschreibung der fuer das Themengebiet relevanten Pakete vorhanden ist. (das ist wirklich sehr umfangreich, klicken Sie etwa mal auf den TaskView zu "Optimization") * Verschiedene Pakete bieten Schnittstellen zu anderen Programmier- sprachen, die zur Performance-Optimierung und zur Erweiterung des Funktionsumfangs eingesetzt werden. Damit wird zum Beispiel die Verwendung von C++-Funktionen ermoeglicht. (man hat dann also den Vorteil, dass man die doch recht einfache und intuitive R-Syntax benutzen kann, aber trotzdem C/C++ performance bekommt was die Geschwindigkeit angeht; also R wird da mitunter auch nur als wrapper benutzt) #---------------------------------# # # # Rechnen mit Vektoren # # # #---------------------------------# Die wichtigsten Befehle fuer das Anlegen von Vektoren sind: - c() "concatenate" - seq() "sequence" - rep() "repeat" schauen wir uns das an: ### Start R-Session ### v1 = c(2.22,-4.56,29) # "c" fuer "concatenate" v1 v2 = seq(from=10,to=30,by=2) v2 v3 = seq(from=0,to=2*pi,length=100) v3 plot( sin(v3) ) # R rechnet immer element-weise plot( sin(v3), type="l") points( cos(v3) ) # addiert Punkte zu einem bestehendem plot lines( cos(v3), col="red") # dasselbe wie points, nur in linienform ?plot() # Hilfe-Seiten v4 = rep(2,10) v4 v5 = rep(c(77,33),4) v5 # fuer Vektoren mit Schrittweite 1 (oder -1): v6 = 1:10 v6 v7 = 10:30 # hat immer Schrittweite 1 (oder -1) v7 v8 = 4:(-4) v8 v8[1] v8[2] v8[7:9] v8[7:11] # viele Funktionen geben automatisch Vekoren zurueck: x = runif(1000,min=-5,max=5) # 1000 auf dem Intervall [-5,5] # gleichverteilte Zufallszahlen x plot(x) plot(x,ylim=c(-10,10)) hist(x) hist(x,xlim=c(-10,10)) y = rnorm(1000,mean=0,sd=1) # normalverteilte Zufallszahlen plot(y) hist(y) test = (y>0) # logischer vector test ypos = y[test] # nur die positiven y's ypos hist(ypos) hist(ypos,breaks=30) yneg = y[y<0] yneg y0 = ifelse( y>0, y, 0 ) # alle negativen werden y0 # durch 0 ersetzt summary(y) summary(y0) max(y) n = which.max(y) # wo ist das Maximum? y[n] # = max(y) w = sort(y) # der Groesse nach ordnen w plot(w) rank(y) # das kleinste, zweit-kleinste, dritt-kleinste... rank(w) #---------------------------------# # # # Rechnen mit Matrizen # # # #---------------------------------# Die wichtigsten Befehle zum Anlegen von Matrizen sind: - matrix() - rbind() und cbind() # rowbind, columnbind und etwas weniger haeufig vielleicht - outer() - diag() Schauen wir uns das an: ### Start R-Session ### x = 1:15 # Vektor x A = matrix(x) A # 15 x 1 Matrix A = matrix(x,nrow=3,ncol=5) A # 3 x 5 Matrix A = matrix(x,nrow=3,ncol=5,byrow=TRUE) A # zeilenweises Auffuellen # Matrix-Elemente: A[1,1] # die Indizierung faengt A[1,2] # immer bei 1 an A[2,5] A[2,] # 2.Zeile A[,4] # 4.Spalte A[,3:5] # 3.-5.Spalte A[c(1,3),c(2,4)] # 1. und 3. Zeile und 2. und 4.Spalte v1 = c(1,1,1,1) v2 = c(1,2,3,4) B = rbind(v1,v2) # zeilenweises Zusammensetzen B C = cbind(v1,v2) # spaltenweises Zusammensetzen C BB = cbind(B,B) BB a = 1:3 a b = c(4,4,4) b outer(a,b) outer(a,b,FUN="+") outer(a,b,Fun="+") # Fehlermeldung, Gross- und # Kleinschreibung ist wichtig outer(a,b,FUN="*") outer(a,b,FUN="/") a = 1:3 b = 1:6 outer(a,b) outer(a,b,FUN="+") outer(a,b,FUN="-") # n x n - Einheitsmatrix: n = 10 e = rep(1,n) e E = diag(e) E diag(E) # diag(Matrix) = Vektor diag(diag(E)) # diag(Vektor) = Matrix # n x n - Nullmatrix: N = matrix(0,n,n) N NN = diag(rep(0,n)) NN diag(N) # diag(Matrix) = Vektor diag(diag(N)) # diag(Vektor) = Matrix x = rnorm(64) # 64 standard-normalverteilte x # Zufallszahlen M = matrix(x,8,8) M test = (M>0) test # boolean matrix Mpos = M[test] # das geht.. Mpos # wird zu Vektor konvertiert.. MM = ifelse(M>0,M,0) # nuetzlicher Befehl MM dim(M) dim(Mpos) dim(MM) length(Mpos) sum(test) # Info-Befehle, mitunter recht nuetzlich: str(M) class(M) mode(M) str(Mpos) class(Mpos) mode(Mpos) # am Donnerstag geht es dann weiter mit den wichtigsten Matrix-Operationen: - %*% fuer Matrix-Multiplikation - solve() fuer Matrix-Inversion - t() Transponieren - det() Determinante - eigen() Eigenwerte und Eigenvektoren