Lukas beantwortete die Frage gut, aber hier sind einige Zeitpläne für die Interessenten (die effektiv durch Vektorisierung Ihres Codes entfernt werden können).
brace <- function(n){
w1=numeric(n)
w2=numeric(n)
r=rnorm(n)
for(i in 1:n)
w1[i]=((r[i]^2))*(1*1)
}
curly <- function(n){
w1=numeric(n)
w2=numeric(n)
r=rnorm(n)
for(i in 1:n)
w2[i]={{r[i]^2}}*{1*1}
}
microbenchmark(curly(1e5) , brace(1e5) , times = 50)
Unit: milliseconds
expr min lq median uq max neval
curly(1e+05) 311.4245 318.8916 324.1990 335.0928 400.8555 50
brace(1e+05) 315.5428 323.8860 328.7982 350.7268 406.5785 50
Ungefähr 5 Millisekunden Unterschied bei 1e5 Schleifenlängen. Also lassen Sie uns die Schleifen entfernen:
braceV <- function(n){
w1=numeric(n)
w2=numeric(n)
r=rnorm(n)
w1=((r^2))*(1*1)
}
curlyV <- function(n){
w1=numeric(n)
w2=numeric(n)
r=rnorm(n)
w2={{r^2}}*{1*1}
}
microbenchmark(curlyV(1e5) , braceV(1e5) , times = 50)
Unit: milliseconds
expr min lq median uq max neval
curlyV(1e+05) 9.014361 9.284532 9.666867 10.81317 37.82510 50
braceV(1e+05) 9.029408 9.373773 10.293302 10.83487 37.76596 50
Der Unterschied ist jetzt ~ 0,5 Millisekunden.
Es ist nicht für mich, mit R-2.15.2 auf 64-Bit-Linux. Bitte geben Sie die Ausgabe von 'sessionInfo()' an. –
Überprüfen Sie die [Blog von Radford Neal] (http://radfordneal.wordpress.com/2010/08/15/two-surpising-things-about-r/) – baptiste
Ich würde auch ein reales Beispiel der Welt schätzen, wo Die oben genannten Unterschiede (die ich nicht reproduzieren kann) würden einen spürbaren Unterschied machen, wie Sie sich einer Aufgabe annähern würden. – Chase