Creo que necesito hacer una respuesta completa porque los comentarios me resultan más difíciles de seguir y ya perdí un comentario al respecto ... Hay un ejemplo en nullglob que demuestra las diferencias entre para y aplica funciones familiares mucho mejor que otros ejemplos. Cuando uno hace la función tal que es muy lenta, entonces es donde se consume toda la velocidad y no encontrará diferencias entre las variaciones en el bucle. Pero cuando haces que la función sea trivial, entonces puedes ver cuánto influye el bucle en las cosas.
También me gustaría añadir que algunos miembros de la familia de aplicaciones inexplorados en otros ejemplos tienen propiedades de rendimiento interesantes. Primero mostraré las replicaciones de los resultados relativos de nullglob en mi máquina.
n <- 1e6
system.time(for(i in 1:n) sinI[i] <- sin(i))
user system elapsed
5.721 0.028 5.712
lapply runs much faster for the same result
system.time(sinI <- lapply(1:n,sin))
user system elapsed
1.353 0.012 1.361
También encontró sapply mucho más lento. Aquí hay algunos otros que no fueron probados.
Llanura de edad se aplican a una versión de la matriz de los datos ...
mat <- matrix(1:n,ncol =1),1,sin)
system.time(sinI <- apply(mat,1,sin))
user system elapsed
8.478 0.116 8.531
Por lo tanto, el comando de aplicación() en sí es sustancialmente más lento que el bucle. (Para bucle no se ralentiza apreciablemente si uso pecado (mat [i, 1]).
Otro que no parece ser probado en otros puestos es tapply.
system.time(sinI <- tapply(1:n, 1:n, sin))
user system elapsed
12.908 0.266 13.589
Por supuesto , uno nunca usaría tapply de esta manera y su utilidad está más allá de cualquier problema de velocidad en la mayoría de los casos.
¿Cómo es esto diferente de df [, "column1"]? ¿También ver? Aplicar con margen = 1. – Greg
El ejemplo no era lo que realmente quería hacer. Quería escribir algunos valores en el marco de datos como datos en un archivo javascript. +1 para la información sobre "margen" en "aplicar". –
Necesitaba recorrer filas para desplazar los valores en columnas en situaciones particulares. Me recordaron que la mejor manera de hacerlo en R es: http://stackoverflow.com/questions/7746567/how-to-swap-values-between-2-columns – thadk