HOWTO · R

replicate()-Funktion in R

Dieses Tutorial führt in die Verwendung der Funktion replicate() in R ein

Auf dieser Seite

R’s replicate() wertet einen Ausdruck wiederholt aus und sammelt jedes Ergebnis. Das ist nützlich, wenn dieselbe Berechnung, Zufallsziehung oder Simulation mehrmals ausgeführt werden soll. Das Ergebnis des Ausdrucks und das Argument simplify bestimmen, ob die gesammelten Werte einen Vektor, eine Matrix, ein Array oder eine Liste bilden.

Was replicate() wiederholt

Das erste Argument, n, gibt die Anzahl der Auswertungen an. Das zweite Argument, expr, wird bei jeder Wiederholung einmal ausgewertet. Das folgende Beispiel gibt fünf Kopien des Skalarwerts 1 zurück:

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

result <- replicate(5, 1)
print(result)

Der zurückgegebene Vektor enthält für jede Auswertung einen Wert. Wenn expr Zufall verwendet, kann jede Auswertung einen anderen Wert ergeben; replicate() sammelt diese Ergebnisse, ohne sie einander anzugleichen.

Syntax und das Argument simplify

Die allgemeine Form lautet replicate(n, expr, simplify = "array"). Dabei ist n die Anzahl der Wiederholungen, expr der auszuwertende Ausdruck und simplify steuert, wie R die gesammelten Ergebnisse vereinfacht. Mit dem Standardwert "array" können die Ergebnisse entsprechend ihrer Form vereinfacht werden: Skalarwerte können einen Vektor, gleich lange Vektoren eine Matrix und höherdimensionale Ergebnisse ein Array bilden. Verwenden Sie simplify = FALSE, um eine Liste beizubehalten, etwa wenn das Ergebnis jeder Wiederholung ein eigenes Objekt bleiben soll.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

values <- replicate(3, c("red", "blue"), simplify = FALSE)
print(typeof(values))
print(length(values))
[1] "list"
[1] 3

typeof() gibt den zugrunde liegenden Typ an, und length() zählt die Elemente der Liste.

Einen Skalar oder Vektor wiederholen

Ein skalarer Ausdruck liefert pro Wiederholung ein Ergebnis. Gibt der Ausdruck jedes Mal einen gleich langen Vektor zurück, ordnet replicate() jeden Vektor als Spalte einer Matrix an. Die Zeilen entsprechen dann den Positionen innerhalb des Vektors, die Spalten den Wiederholungen.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

result <- replicate(3, seq(1, 4))
print(result)

Dasselbe Muster eignet sich für Berechnungen, die einen Vektor fester Länge zurückgeben. Wenn die Ergebnislängen variieren, lassen sich die Werte nicht zu einer regulären Matrix anordnen. Setzen Sie dann simplify = FALSE, damit jedes Ergebnis als Element in einer Liste erhalten bleibt.

replicate() mit einer for()-Schleife verwenden

Eine for()-Schleife kann einen Wert aufbauen, der zum Ergebnis jeder Wiederholung wird. Initialisieren und füllen Sie innerhalb des Ausdrucks einen Vektor und lassen Sie diesen Vektor anschließend als letzten Ausdruck stehen:

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

result <- replicate(2, {
  values <- numeric(4)
  for (i in seq_len(4)) {
    values[i] <- i * 2
  }
  values
})
print(result)

Der letzte Ausdruck ist values. Daher gibt jede Auswertung den fertig gefüllten Vektor zurück, und das vereinfachte Ergebnis hat eine Spalte pro Wiederholung. Eine for()-Schleife selbst gibt NULL zurück; Werte innerhalb der Schleife auszugeben, macht diese ausgegebenen Werte nicht zu ihrem Rückgabewert. Besteht der wiederholte Ausdruck nur aus einer solchen Schleife, gibt jede Wiederholung NULL zurück. Speichern Sie die Werte und geben Sie das Speicherobjekt zurück, wenn Sie sie im Ergebnis benötigen.

Zufallssimulationen wiederholen

Zufallsausdrücke werden bei jeder Wiederholung neu ausgewertet. rnorm(4) zieht zum Beispiel vier Werte aus einer Standardnormalverteilung. Die resultierende Matrix hat eine Spalte pro Ziehung von vier Werten. Die gezogenen Zahlen variieren zwischen den Durchläufen und sollten daher nicht als feste Ausgabe betrachtet werden.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

set.seed(42)
draws <- replicate(3, rnorm(4))
print(dim(draws))

Auch eine Simulationsfunktion lässt sich wiederholt auswerten. Definieren Sie sie so, dass sie die gewünschte Statistik oder Messgröße zurückgibt, und übergeben Sie einen Aufruf dieser Funktion als expr. Eine Funktion, die mit runif(1) einen Wert zieht, kann beispielsweise viele Male ausgewertet werden, um die Verteilung der simulierten Werte zu untersuchen. Wenn Sie eine reproduzierbare Zufallsfolge benötigen, legen Sie einen Seed fest und dokumentieren Sie ihn. Ohne festen Seed unterscheiden sich die Werte im Allgemeinen zwischen den Durchläufen.

Bootstrap-Resampling mit replicate()

Beim Bootstrap-Resampling wird die Unsicherheit angenähert, indem aus beobachteten Daten Stichproben mit Zurücklegen gezogen werden. Bei jeder Wiederholung erstellt sample() einen neuen Datensatz aus einer solchen Stichprobe. Wenn jede Stichprobe dieselbe Größe wie die ursprünglichen Daten hat, ist die vereinfachte Ausgabe eine Matrix, deren Spalten die Bootstrap-Replikationen enthalten.

Führen Sie dieses Beispiel aus:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

original_data <- c(2, 4, 6, 8, 10)
set.seed(42)
resamples <- replicate(5, sample(original_data, replace = TRUE))
print(dim(resamples))

Jede Spalte steht für einen neu gezogenen Datensatz. Da mit Zurücklegen gezogen wird, können Werte mehrfach vorkommen. Wenn Sie statt aller gezogenen Werte eine Statistik per Bootstrap bestimmen möchten, berechnen Sie diese innerhalb des wiederholten Ausdrucks, zum Beispiel mit mean(sample(original_data, replace = TRUE)). So entsteht eine Statistik pro Wiederholung, die üblicherweise in einem Vektor gesammelt wird.