Lukas ha risposto gentilmente alla domanda, ma qui ci sono alcuni tempi sul sovraccarico per chi è interessato (che può essere efficacemente rimosso mediante il vettorizzazione del codice).
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
Circa una differenza di 5 millisecondi alle lunghezze di loop 1e5. Quindi rimuoviamo i loop:
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
La differenza è ora intorno a ~ 0,5 millisecondi.
fonte
2013-04-10 13:42:16
Non fa per me, utilizzando R-2.15.2 su Linux a 64 bit. Si prega di fornire output da 'sessionInfo()'. –
controlla il [blog di Radford Neal] (http://radfordneal.wordpress.com/2010/08/15/two-surpising-things-about-r/) – baptiste
Vorrei anche apprezzare un esempio reale di dove il le differenze identificate sopra (che non posso riprodurre BTW) farebbero una differenza tangibile nel modo in cui ti avvicineresti a un compito. – Chase