Die Effizienz der Schleifen kann als Looping durch sie auf einmal und nicht enorm in R durch die Verwendung der Funktionen anwenden erhöht werden, die im wesentlichen ganzen Vektoren von Daten verarbeiten. Für die Schleife oben gezeigt, gibt es zwei grundlegende Operationen während jeder Iteration geschieht:
# A vector of two random numbers is generated
x <- rnorm(2)
# The difference between those numbers is calculated
x[2] - x[1]
In diesem Fall wird die entsprechende Funktion sapply()
wäre. sapply()
arbeitet auf einer Liste von Objekten, wie beispielsweise der Vektor, der durch die Schleifenanweisung erzeugt 1:N
und liefert einen Vektor der Ergebnisse:
sapply(1:N, function(i){ x <- rnorm(2); return(x[2] - x[1]) })
anzumerken, dass der Indexwert i
während der Funktionsaufruf zur Verfügung und nimmt nacheinander auf den Werten zwischen 1
und N
, jedoch ist es in diesem Fall nicht erforderlich.
Der Einstieg in die Gewohnheit, zu erkennen, wo apply
kann über for
verwendet werden, ist eine sehr wertvolle viele R-Bibliotheken für parallele Berechnung bieten Plug-and-Play-Parallelisierung durch apply
Funktionen qualifikations. Die Verwendung von apply
kann oft den Zugriff auf signifikante Leistungssteigerungen auf Multicore-Systemen mit null Refactoring von Code ermöglichen.
Was mit der zweiten Antwort falsch ist, dass R Liste thread: res <- rnorm (10^6) -rnorm (10^6)? – ars
@ars: Sie haben absolut Recht - das gibt die schnellste Lösung (um eine Größenordnung). Der beste Rat wäre 1. Verwenden Sie Funktionen, die natürlich auf Vektoren arbeiten (wie rnorm); 2. Wenn das nicht möglich ist, verwenden Sie eine * apply-Funktion; 3. Wenn das nicht möglich ist, verwenden Sie eine for-Schleife mit Vorbelegung. –