R ist eine quelloffene Implementierung der S-Plus Programmiersprache.

R ist mehr als eine Programmiersprache - es ist eine interaktive Umgebung um Statistik anzuwenden.
R verfügt über verschiedene Datentypen wie zum Beispiel Vektoren (numerical, character, logical), Matrizen, data frames, und Listen.

R ist Zeichenspezifisch. FOO, Foo, und foo sind drei verschiedene Objekte.

Kurze Beispiele:

Gib einen String oder eine Variable aus:

print("Hello World!")

Füge zwei Strings zusammen (string append, string concat)

paste("min: ", min (x$DS1, na.rm=T)))

Write into the file RESULT.txt (or to the screen)
cat("end{document}\n", file="RESULT.txt", append=TRUE)

Erklärungen

Um eine Liste an Nummern zu verwenden benutzt man das "c" command. Diese Liste wird auch Vektor in R genannt.

Der Grund wieso man c für eine Liste verwendet ist das c für combine steht.

Mit anderen Worten, braucht man einen Array, so verwendet man c in der Programmiersprache R.

Assignments in R nimmt man mittels des sogenannten assignment Operator <- vor.

Beispiele hierzu:

a <- m*c^2
b <- 55

Eine Liste von Nummern wird auch als Vektor bezeichnet.

Nummern innerhalb des c Commands werden mittels commas getrennt.
Beispiel:

array <- c(3,5,7,9)

In Ruby wäre dies: array = [3,5,7,9]

Man bedenke das diese Vektoren bei 1 anfangen - und nicht wie in Ruby bei 0. Ein Array in R beginnt somit bei 1.

Auch String Arrays kann man verwenden, wie folgendes Beispiel zeigt:

array = c("cat","dog","deer")

Vectors

Vectors sind der primäre Datentyp in R.

Vectors erstellt man mittels der internen c Funktion, wie bereits oben gezeigt:
p <- c(2,3,5,7)

p als Vektor hat nun 4 Primzahlen.

Elemente eines Vectors kann man mittels [] abgreifen. In diesem Beispiel hier ergäbe p[3] 5.
a = c(2,3,5,7)

Eine weitere Methode sollte folgende sein, via ::
vector <- seq(1:8)
Dies erstellt eine Reihe von 1 bis 8.

In Ruby wäre dies: (1..8).to_a # => [1, 2, 3, 4, 5, 6, 7, 8]

Konkrete Beispiele

N <- 100
x <- rnorm(N)
y <- x + rnorm(N)
plot(y ~ x)
abline( lm(y ~ x), col = "red" )

Display a scatter plot of two variables:

N <- 100
x <- rnorm(N)
y <- x + rnorm(N)
plot(y ~ x)
abline( lm(y ~ x), col = "slateblue" )

Matrix

Eine Matrix in R kann man so definieren:

matrix = as.data.frame(matrix(1:12, ncol = 4))
colnames(matrix) = LETTERS[1:4]
matrix

Das Ergebnis sieht dann in etwa so aus:

    A B C  D
  1 1 4 7 10
  2 2 5 8 11
  3 3 6 9 12

paste

paste() ist eine string-formatting Methode in R.

Es gibt uns einen einzelnen String zurück.

Aktuelles Arbeitsverzeichnis

Das aktuelle Arbeitsverzeichnis findet man wie folgt heraus:

getwd()

Range

Von 1 bis 20 zählen geht so:
x <- 1:20

In Ruby wäre dies: 1..20

Dies scheint das selbe zu machen wie seq().

Und natürlich auch so:
x = 1:20
Geht auch indem man "annimmt" das es sich um Jahreszahlen handelt:
2008:2014 # [1] 2008 2009 2010 2011 2012 2013 2014

Mit dem Befehl head(DATA, n) lassen sich die ersten n Datenreihen des Datensatzes DATA anzeigen.
Im Gegensatz dazu zeigt tail(DATA, n) die letzten n Datenreihen an.
Der Defaultwert von n ist 6, daher können wir sagen das head() die ersten sechs Reihen anzeigt.

Beispiel:

head(foo)
10 %% 3

Modulo

Der Modulo Operator in R funktioniert so:
%%

Sorting

Man kann Datenbestände sortieren, mittels .sort().
sort(c( 1, 3, 2, 10, 5 ))

Read input from a file read tag

Wir können Kommandos von einer Datei einlesen, z. Bsp input.R.

Das ganze geht interaktiv so:
source("input.R")
source("/Users/x/DATA/PROGRAMMING_LANGUAGES/R/functions.R")
Will man mehr Informationen dazu erhalten übergibt man echo=T:
source("/Users/x/DATA/PROGRAMMING_LANGUAGES/R/functions.R", echo=T)

Grep

Mittels der grep Funktion kann man Muster in einem String finden.

Beispiel: suche A in einem Vektor namens month.name:
month.name[grep("A", month.name)]
[1] "April" "August"
Noch ein Beispiel:
grep("a+", c("abc", "def", "cba a", "aa"), perl=TRUE, value=FALSE)

Man kann Perl-Regex verwenden indem man perl=TRUE als Parameter übergibt. Dies verwendet dann die PCRE regular expression library.

Optional arguments

Funktionen in R können auch optionale Argumente erhalten.

Dies geht indem man in der Funktion selbst mittels missing() nachfragt.
if(missing(opt_arg)) { # "missing()" is used to test whether a value was specified as an argument

plot

Mittels plot() zeichnet man Datentypen.
plot(x, y)

Man kann die X und Y Achse umbenennen, zum Beispiel so:
xlab=expression(phi) # get the Greek letter as the x-axis label.

Die X-Axis kann man komplett eliminieren wie folgendes Beispiel zeigt:
plot(x,y, xaxt = 'n')
plot(1:10, xaxt = "n", xlab="Some Letters")

Man kann auch eine bestimmte Farbe verwenden, und zwar mittels col:
plot(cars, type="o", col="blue")

Das ganze sieht dann in etwa so aus:

API Docu:
plot(x, y, main="title", sub="subtitle", xlab="X-axis label", ylab="y-axix label", xlim=c(xmin, xmax), ylim=c(ymin, ymax))

Folgende plot-Typen sind möglich:

"p" für points
"l" für lines
"b" für both
"c" für the lines part alone of "b"
"o" für both "overplotted"
"h" für "histogram" like (or "high-density") vertical lines
"s" für stair steps
"S" für other steps, see "Details" below
"n" für no plotting
Will man einen Titel setzen, so muss man zuvor title() verwenden.

Titles

Verwende die title() Funktion um Labels zu einem Plot hinzuzufügen.

Diese Funktion akzeptiert 4 Argumente.

title(main="main title", sub="sub-title", xlab="x-axis label", ylab="y-axis label")
Man kann auch einen Titel mit mehreren Zeilen verwenden:
title(main="This is \nTitle")
Will man rote Schrift verwenden so geht dies hier:
title(main="Autos", col.main="red", font.main=4)

rnorm

Erstelle pseudo-random normal Vektoren mit x- und y-coordinates via rnorm().
Dies mag hilfreich sein um ein "dummy dataset" zu erzeugen, da verschiedene Sequenzen erstellt werden.

Die Anzahl an Nummern die generiert wird wird in den () angegeben.
x <- rnorm(50)
y <- rnorm(x)
plot(x,y) # Zeichnen
rnorm(n=100,mean=3,sd=1)

Boxplot

Man kann in R auch box-and-whisker plots erstellen, sogenannte "boxplots". Diese erlauben eine sehr saubere Darstellung von Trends, und folgendes Bild zeigt wie so ein Boxplot aussehen mag:

Die Syntax hierzu ist:
boxplot(x, ...)
boxplot(formula, data = NULL, ..., subset, na.action = NULL)
boxplot(x, ..., range = 1.5, width = NULL, varwidth = FALSE, notch = FALSE, outline = TRUE, names, plot = TRUE, border = par("fg"), col = NULL, log = "", pars = list(boxwex = 0.8, staplewex = 0.5, outwex = 0.5), horizontal = FALSE, add = FALSE, at = NULL)
Warning: The file `examples/boxplot_example.rb` was not found.
boxplot(data)

variance

Was ist die Varianz?

Die Berechnung der Varianz erfolgt indem wir von jedem Wert aus der Urliste das arithmetische Mittel abziehen. Diese Summe wird quadriert und mit den entsprechenden anderen Werten addiert. Zuletzt dividiert man dann das ganze noch durch die Anzahl der Datensätze.

Die Varianz (variance) zu finden geht so:
var(c(1,2,3,4,5,6,7))

Nehmen wir noch einmal den Schüler, der 5 Tagen 12,11,14,16 und 15 Minuten zur Schule benötigt.
Die Varianz dieser Datensätze liegt dann bei:
var(c(12.0,11.0,14.0,16.0,15.0)) # 4.3

Standardabweichung

Die Standardabweichung wird berechnet, indem aus der Varianz die quadtratische Wurzel gezogen wird.

Die Standardabweichung (sd) zu finden geht so:
sd(c(1,2,3,4,5,6,7))
sd(c(12, 11, 14, 16, 15))

mean

Den Durchschnittswert, also mean(), auch bekannt als das "arithmetische Mittel", kann man wie folgt berechnen:
mean(c(1,2,3,4,5,6,7)) # Ergibt 4

Sehen wir uns noch ein Beispiel an.
Ein Schüler braucht an 5 Tagen 12,11,14,16 und 15 Minuten zur Schule. Wie viele Minuten benötigt er im Durchschnitt um zur Schule zu gelangen?
mean(c(12,11,14,16,15)) # 13.6

dir

Alle Dateien im aktuellen Verzeichnis einsehen kann man via dir():
dir()

Help

Hilfe kann man via help() interaktiv einsehen:
help(read.csv)
Hilfe zu einer Funktion anzeigen kann man so::
?summary

R Statistics

The rgl package is a visualization device system for R, using OpenGL as the rendering backend.

R beenden

Um R zu beenden macht man dies hier:
q()

Options

Um die Nachkommastellen angezeigt bekommen kann man die options() Funktion verwenden:
options(digits=17)

system

Man kann in R auch externe Software aufrufen.
Dies geschieht mittels system.
system("...")
Beispiel:
x <- shell("dir", intern=T) # reads current working directory and assigns to file
shell.exec("C:/Documents and Settings/Administrator/ Desktop/my_file.txt") # opens file with associated program

typeof

Will man den Wert einer Variablen erkennen geht dies so:
a = numeric(10)
typeof(a)
[1] "double"

library

Man kann bestimmtes Addons laden. Dies geht via library().
library()

library(tcltk)
demo(tkcanvas)
demo(tkdensity)
Wie man ein Package installiert, sieht man bei install.
Die demos für Tk findet man zum Beispiel hier:
bl /Programs/R/3.0.3/lib/R/library/tcltk/demo/tkcanvas.R

install

Wie installiere ich ein Addon?

install.packages("ggplot2")

Wurzel ziehen

Die Wurzel (Squareroot) kann man mittels sqrt wie folgt ziehen:
sqrt(3)
a = 3; b = sqrt(a * a+3); b

Oder, angewandt auf einen Array, so:
sqrt(c(25,16,64))

Vorteil hier ist das die Wurzel auf den gesamten Array angewandt wird.

integrate

Zum Integrieren kann die Funktion integrate() verwendet werden.
In folgendem Beispiel wird die Dichtefunktion der Standardnormalverteilung von 0 bis +Unendlich integriert (und damit die Wahrscheinlichkeit bestimmt, dass eine Standardnormalverteilung einen positiven Wert annimmt):
integrate(dnorm, 0, Inf)
0.5 with absolute error < 4.7e-05
integrate(dnorm, 0, Inf, mean=1, sd=5)

str

Wie kann man den Typ eines Objektes in R anzeigen?

Mittels str();
b <- 55; str(b)

class() existiert auch, gibt aber weniger Information zurück.

Logarithmieren

exp(a)
Beispiele:
log(exp(3))
log(10) # [1] 2.302585
log10(1e7) # = 7

http://stat.ethz.ch/R-manual/R-devel/library/base/html/Log.html

Anzeigen einer Variablen

Variablen kann man wie folgt anzeigen:

ls()
[1] "a" "b" "bubba" "c" "last.warning"
[6] "tree" "trees"

CSV Dateien lesen

Wir können .csv Dateien einlesen mittels der Funktion read.csv().

Das erste Argument ist der Name der Datei.
Das zweite Argument sagt ob die erste Reihe ein Satz von Labels ist.
Das dritte Argument bestimmt den Separator.

Beispiele für read.csv():

heisenberg <- read.csv(file="simple.csv",head=TRUE,sep=",")
csv <- read.csv(file="/Users/x/DATA/PC/CVS/test.cvs",head=TRUE,sep=",")
csv2 = read.csv(file="/Depot/Downloads/trees91.csv",head=TRUE,sep=",")
csv = read.csv("/Users/x/DATA/STUDIUM/YAML/passed_exams_per_month.csv")

Diese CSV Table kann man dann mittels summary() ausdrucken.

summary(csv)
summary(read.csv("/root/DiamondShell/celsius_to_fahrenheit.csv"))

Dies mag zu einer Fehlermeldungen führen wie duplicate 'row.names' are not allowed. Hier kann man eine andere Variante verwenden, und row.names=NULL setzen.

csv = read.table("/Users/x/DATA/STUDIUM/YAML/passed_exams_per_month.csv", header=TRUE, sep=",", row.names=NULL)
oder
csv <- read.csv("/Users/x/DATA/STUDIUM/YAML/passed_exams_per_month.csv", row.names=NULL)

Mittels des sep Arguments kann man einen beliebigen Separator verwenden.
.csv Dateien sollten ein comma verwenden.

Jede Spalte erhält automatisch einen Namen der sich aus dem "header" ergibt - in den meisten Fällen ist dies die erste Zeile in einer Datei.
Diese Spalte (column) kann man via $ herausfinden, mittels variablen_name$column_name:
heisenberg$trial
heisenberg$mass
heisenberg$velocity
Hat man die Namen vergessen kann man names() aufrufen:
names(heisenberg)
Will man die Attribute einsehen geht folgendes:
attributes(heisenberg)

Die Variable die man hier verwendet, also "heisenberg", enthält 3 Reihen. Diese Reihen kann man über $ ansprechen, wobei der Teil der nach dem $ kommt den Namen des Headers haben muss (also der ersten Zeile in der .csv Datei):
heisenberg$trial
heisenberg$mass
heisenberg$velocity

Hat man vergessen welche Columns in einer Variablen gespeichert sind, kann man die names() Funktion aufrufen:
names(heisenberg)

Die ersten 5 Zeilen einlesen kann man so:
a <- read.csv(file, nrows=5, header=TRUE)

Will man die ersten 5 Zeilen ignorieren so kann man dies hier anwenden:
b <- read.csv(file, skip=6, header=TRUE)

Loops

Loop in R kann man mittels:

- for
- while
- apply

erreichen.

Mittels break kommt man aus einer loop heraus. next springt zur nächsten Iteration.

For Loop Beispiel:
mydf <- iris
myve <- NULL # Creates empty storage container
for(i in seq(along=mydf[,1])) {
myve <- c(myve, mean(as.numeric(mydf[i, 1:3]))) # Note: inject approach is much faster than append with "c". See below for details.
}
myve

Hier noch ein weiteres, allgemeineres Beispiel für eine for loop in R:
for (i in 0:10) {
x <- 100 + i * 30
tkcreate(canvas, "line", x, 250, x, 245, width=2)
tkcreate(canvas, "text", x, 254,
text=10*i, anchor="n", font=plotFont)
}

function

Funktionen in R sind Objekte.

Man kann in R natürlich auch seine eigenen Funktionen erstellen.
Dies geht über function().

Die allgemeine Syntax hierzu ist folgende:
name_of_function <- function(arg1, arg2, ... ){
statements
return(object)
}

Jede Funktion in R hat folgende 3 Teile:

body() dies ist der Code innerhalb einer Funktion
formals() dies inkludierte die Liste an Argumenten die das Verhalten der Funktion kontrollieren
environment() dies ist die Umgebung der Variable in einer Funktion

Das ganze kann man sogar aufrufen, siehe:
body(name_of_function)
body(my_summary)

Interessanterweise kann man auch mehrere Zwischenwerte speichern:

foo <- function(x, y) {
z1 <- x + y
z2 <- x + 2*y
list(result1=z1, result2=z2)
}
foo(2, 5)

Eine Funktion in R kann man anschauen indem man den Namen der Funktion eintippt, ohne die ().

if / else Kontrolle

if (1 == 0) {
print(1)
} else {
print(2)
}

Misc

Verwende ... um eine variable Anzahl an Argumenten an eine Funktion anzuzeigen.
R verwendet $ wie andere Sprachen den . Dot Operator verwenden.

R zeigt standardmäßig 6 Nachkommastellen an.

Reservierte Charaktere in R:

c q
s t
C D
F I
T

Anhang

Signal processing algorithms:
Fourrier transform
wavelet transforms

Sitemap

Lokale Links

Sitemap

Links zu R

Ramachandran
R Tutorial
Sehr gutes R Tutorial
Alle R-Packages
Auch ein sehr gutes R Tutorial
How to package R packages
A good R manual
Another good R manual
Gutes R Tutorial auf r-tutor.com
Gutes R Tutorial mit vielen Bildern
Bioinformatik und R
statmethods.net - ein gutes Tutorial für R Beginner

Videolinks