Der R-Befehl paste ermöglicht das Verbinden (Konkatenieren) von zwei oder mehr Strings oder Stringvektoren. Zum Beispiel wird aus den zwei Strings „Hallo“ und „databraineo“ mittels paste der String „Hallo databraineo“.

Verknüpfung von Strings in R

Dabei gibt es verschiedene Optionen, die Strings miteinander zu verknüpfen. Die einfachste ist die explizite Angabe der einzelnen Strings als Parameter.

paste("Hallo","databraineo","!")

Benötigen wir ein anderen Trennzeichen als das Leerzeichen, dann kann es mit dem Parameter sep (für separator) angegeben werden.

paste("Ich","trenne","mit","Bindestrich",sep="-")

Haben wir einen Vektor von Strings, die alle miteinander zu einem String verbunden werden sollen, müssen wir den Parameter collapse verwenden.

vektor <- c("Hallo","databraineo","!")
paste(vektor,collapse=" ")

Wenn wir collapse nicht setzen, dann werden die Strings komponentenweise miteinander verbunden und ein Vektor der gleichen Länge ausgegeben. Das ist das übliche Vorgehen in R, um eine Funktion vektorwertig zu machen.

vektor1 <- c("Hallo","databraineo","!")
vektor2 <- c("eins","zwei","drei")
paste(vektor1,vektor2)

Der R-Befehl paste0

Es gibt auch noch die Variante paste0. Bei dieser ist das Trennzeichen schon auf „“ (also leer) gesetzt. Ansonsten verhält sich die Funktion identisch. Laut Manual soll sie ein klein wenig schneller sein als paste.

 

Code-Beispiel für die R-Funktion paste

# Verbinden von drei Strings zu einem
paste("Hallo","databraineo","!")
 
# mit Angabe des Trennzeichens
paste("Hallo","databraineo","!",sep=",")
 
# paste mit nur einem Vektor macht gar nichts
vektor <- c("Hallo","databraineo","!")
paste(vektor)
 
# damit aus dem Vektor ein String wird, muss collapse gesetzt werden
paste(vektor,collapse = " ")
 
# bei Angabe von zwei oder mehr Vektoren werden diese komponentenweise verbunden.
vektor1 <- c("Hallo","databraineo","!")
vektor2 <- c("eins","zwei","drei")
paste(vektor,vektor2)
 
# Sind die Vektoren unterschiedlich lang, aber ein Vielfaches voneinander, 
# wird der kürzere Vektor entsprechend verlängert
vektor1 <- c("Hallo","databraineo","!")
vektor2 <- c("eins")
paste(vektor1,vektor2)
 
# paste0 
paste0(vektor1,collapse="#")
 
# Es gibt tatsächlich minimale Unterschiede in der Laufzeit
library(rbenchmark)
benchmark(
  "paste"={
    a <- rnorm(10000);s1 <- paste(a,sep="",collapse="#")
    },
  "paste0"={
    b <- rnorm(10000);s0 <- paste0(a,collapse="#")
    })
 
# Die häufigste Anwendung ist vermutlich das Verknüpfen von Text und Variable
print(paste("Die ersten Stellen von pi lauten",pi))
print(paste("Auf vier Nachkommastellen gerundet, sieht pi so aus:",round(pi,4)))
# Das geht natürlich auch mit der Funktion sprintf
sprintf("Auf vier Nachkommastellen gerundet, sieht pi so aus: %.4f",pi)
 
# Mit einem Datum    
print(paste("Heute ist der",Sys.Date()))      
print(paste("Heute ist der",format(Sys.Date(),"%d.%m.%Y")))