Tengo un código y el tiempo total transcurrido es de alrededor de 30 segundos, el siguiente código es de alrededor de 27 segundos. Entrecerré el código infractor a esto:¿Por qué esto es tan lento? (bucle en una fila DF frente a un vector independiente)
d$dis300[i] <- h
así que cambio a esta otra pieza y ahora está trabajando muy rápido (como se esperaba).
Mi pregunta es por qué esto es demasiado lento contra el segundo. El Datos DF es de alrededor de 7500x18 vars
Primera: (27 seg transcurrido)
d$dis300 <- 0
for (i in 1:netot) {
h <- aaa[d$ent[i], d$dis[i]]
if (h == 0) writeLines(sprintf("ERROR. ent:%i dis:%i", d$ent[i], d$dis[i]))
d$dis300[i] <- h
}
Segundo: (0,2 seg transcurrido)
d$dis300 <- 0
for (i in 1:netot) {
h <- aaa[d$ent[i], d$dis[i]]
if (h == 0) writeLines(sprintf("ERROR. ent:%i dis:%i", d$ent[i], d$dis[i]))
foo[i] <- h
}
d$foo <- foo
se puede ver que ambos son la "misma", pero el Ofender uno tiene este DF en lugar de un solo vector.
Cualquier comentario es realmente apreciado. Vengo de otro tipo de idiomas y esto me volvió loco durante un tiempo. Al menos tengo una solución, pero me gustaría evitar este tipo de problemas en el futuro.
Gracias por su tiempo,
Solo para aclarar, la diferencia de velocidad entre los dos es de 30 segundos frente a 27 segundos, y ¿considera esto una aceleración dramática? – joran
Si los tiempos relativos de @ joran son correctos (¿y cuándo está equivocado? :-)), obtendrá mejores aceleraciones adoptando estos hábitos y técnicas: http://stackoverflow.com/questions/2908822/speed -up-the-loop-operation-in-r/8474941 # 8474941 –
@ gsk3 Todos los días, según mi esposa. – joran