Unter Coding Style versteht man die Formatierung von Code. Ein konsistenter Coding Style erleichtert das Lesen von Code. Es ist sinnvoll, sich an gewisse Richtlinien zu halten, die sich in der R-Community etabliert haben.
Der Zuweisungsoperator <- sollte von Leerzeichen umgeben sein, also:
x <- c(5, 6, 10)
Kommentare schreibt man mit einem #-Zeichen gefolgt von einem Leerzeichen. Wenn ein Kommentar in derselben Zeile wie Code ist, sollten zwei Leerzeichen zwischen Code und Kommentar sein:
x <- 5 # hier ist ein Kommentar
Das Erstellen einer Zahlensequenz mittels : erzeugt einen Vektor - daher ist ein umschließendes c() nicht notwendig:
a <- 4:12 # nicht a <- c(4:12)
Wenn man eine Funktion aufruft, sollte die öffnende runde Klammer ( direkt und ohne Leerzeichen auf den Funktionsnamen folgen:
a <- c(2, 6, 8) # nicht a <- c (2, 6, 8)
b <- data.frame(x=1:3, y=c(8, 5, 1)) # nicht b <- data.frame (x=1:3, y=c (8, 5, 1))
Dies gilt auch für die eckigen Klammern beim Indizieren, die öffnende eckige Klammer [ soll unmittelbar auf den Variablennamen folgen:
a[2] # nicht a [2]
[1] 6
Argumente innerhalb der runden Klammern werden mit Kommas gefolgt von einem Leerzeichen voneinander getrennt:
a <- c(2, 6, 8) # nicht a <- c(2,6,8)
b <- data.frame(x=1:3, y=c(8, 5, 1)) # nicht b <- data.frame(x=1:3 , y=c( 8, 5,1))
Argumente weist man in den runden Klammern mit = konkrete Werte zu; hier sollte man keine Leerzeichen um das =-Zeichen verwenden (wobei es aber auch üblich ist, das =-Zeichen mit Leerzeichen zu umschließen – wichtig ist nur, dass man konsisten eine Variante verwendet):
b <- data.frame(x=1:3, y=c(8, 5, 1)) # nicht b <- data.frame(x = 1:3, y = c(8, 5, 1))
Wenn ein Befehl einmal sehr lange wird, kann man an der richtigen Stelle in die nächste Zeile wechseln. Dies ist z.B. nach einem , gut möglich. Also statt folgender langen Zeile kann man denselben Befehl auf mehrere Zeilen aufteilen, was die Lesbarkeit deutlich verbessert:
df <- data.frame(name=c("Ben", "Hannah", "Laura", "Stefan"), gender=c("m", "f", "f", "m"), age=c(54, 23, 35, 29))
df <- data.frame(name=c("Ben", "Hannah", "Laura", "Stefan"),
gender=c("m", "f", "f", "m"),
age=c(54, 23, 35, 29))
Variablennamen sollten grundsätzlich nur aus Kleinbuchstaben, Unterstrichen und Ziffern bestehen. Außerdem sollten englische Bezeichnungen gewählt werden.
Gute Namen sind:
n_students <- 50
df <- 3
band_1 <- c(4, 7)
Weniger gute Namen sind:
N <- 44
nStudents <- 50
n_studierende <- 11
DF <- 3
Df <- 3
Band.1 <- c(5, 8)
band.1 <- c(4, 7)
Die weniger guten Namen sind allerdings allesamt syntaktisch korrekt, d.h. R würde diese Namen anstandslos akzeptieren.
Man kann vorhandene Vektoren spaltenweise in ein Data Frame zusammensetzen. Zum Beispiel:
name <- c("Ben", "Hannah", "Laura", "Stefan")
gender <- c("m", "f", "f", "m")
age <- c(54, 23, 35, 29)
df <- data.frame(name, gender, age)
df
name gender age
1 Ben m 54
2 Hannah f 23
3 Laura f 35
4 Stefan m 29
Die Spaltennamen werden automatisch auf die Namen der Vektoren gesetzt. Beachten Sie aber, dass die drei ursprünglichen Vektoren komplett unabhängig von den Spalten im Data Frame sind; es handelt sich dabei um unterschiedliche Objekte. D.h. der Vektor name ist nicht gleich der Spalte df$name, obwohl sie dieselben Elemente beinhalten.
age
[1] 54 23 35 29
df$age
[1] 54 23 35 29
Wenn Sie ein Element im Vektor age ändern, betrifft das aber nicht die Spalte df$age:
age[1] <- 34
age
[1] 34 23 35 29
df$age
[1] 54 23 35 29
D.h. wenn Sie die Datentypen der Spalten des Data Frames wissen möchten, dann können Sie dies entweder mit str tun:
str(df)
'data.frame': 4 obs. of 3 variables:
$ name : chr "Ben" "Hannah" "Laura" "Stefan"
$ gender: chr "m" "f" "f" "m"
$ age : num 54 23 35 29
Oder aber auch einzeln für eine bestimmte Spalte:
class(df$name)
[1] "character"
Der Datentyp des Vektors name ist in diesem Fall sogar ein anderer:
class(name)
[1] "character"
Obwohl der Datentyp von age gleich dem Datentyp von df$age ist, handelt es sich dabei trotzdem um unterschiedliche Objekte.
Mit dem $-Operator kann man eine Spalte aus einem Data Frame bzw. Tibble herausgreifen. Das Ergebnis ist in beiden Fällen immer ein Vektor:
library(tibble)
df <- data.frame(name=c("Ben", "Hannah", "Laura", "Stefan"),
gender=c("m", "f", "f", "m"),
age=c(54, 23, 35, 29))
tf <- tibble(name=c("Ben", "Hannah", "Laura", "Stefan"),
gender=c("m", "f", "f", "m"),
age=c(54, 23, 35, 29))
df$age
[1] 54 23 35 29
tf$age
[1] 54 23 35 29
Mittels Indizierung (also den eckigen Klammern []) kann man ebenfalls Elemente, darunter auch ganze Spalten, herausgreifen. Hier unterscheiden sich Data Frames von Tibbles. Während Data Frames manchmal Vektoren und manchmal Data Frames zurückliefern, liefern Tibbles immer Tibbles zurück:
df[, "age"] # Vektor
[1] 54 23 35 29
df[1:2, 1] # Vektor
[1] "Ben" "Hannah"
df[2:4, 1:2] # Data Frame
name gender
2 Hannah f
3 Laura f
4 Stefan m
tf[, "age"] # Tibble
# A tibble: 4 x 1
age
<dbl>
1 54
2 23
3 35
4 29
tf[1:2, 1] # Tibble
# A tibble: 2 x 1
name
<chr>
1 Ben
2 Hannah
tf[2:4, 1:2] # Tibble
# A tibble: 3 x 2
name gender
<chr> <chr>
1 Hannah f
2 Laura f
3 Stefan m
Tibbles sind also hier konsistenter als Data Frames.