Hola Jorge, muchas gracias por tu pronta respuesta, no me di cuenta que el formateo podr�a causar problemas, env�o de nuevo el c�digo sin formatos. La idea b�sica es para un set de n�meros de columnas (desordenados) y un set de numeros de fila el loop lo que hace es ir a la fila y columna correspondiente de data, tomar el valor y luego hacer la media sobre esos.
data=matrix(rnorm(100*20),20,100) col=sample(1:100,100) t1=Sys.time() medias=replicate(1000,{ sel=sample(1:20,10) pareja=sample(sel,100,replace = T) ta=Sys.time() recep=NULL for(i in 1:100){ n=col[i] m=pareja[i] c=data[m,n] recep=c(recep,c) } tb=Sys.time() media=mean(recep) tt=tb-ta c(media,tt) },simplify=T) t2=Sys.time() diftime=(t2-t1)[[1]] sum(medias[2,])/diftime Fernando Macedo El 18/03/15 a las 21:06, Jorge I Velez escribi�: > Hola Fernando, > > No puedo ver las negritas, pero intuyo que lo que quieres es calcular > la media por columnas? Si es asi, hay dos maneras: > > 1. Usa colMeans(x), donde "x" es tu matriz de datos > 2. Usa apply(x, 2, mean) donde "x" es tu matriz de datos > > Existe una tercera pero menos conocida posibilidad que es usando el > paquete matrixStats. Esta implementado en C en su mayoria y, de > acuerdo con el autor, es mucho mas rapido que la familia *apply. En > http://cran.r-project.org/web/packages/matrixStats/vignettes/matrixStats-methods.html > > puedes encontrar mas informacion. > > Saludos cordiales, > Jorge.- > > > > 2015-03-19 11:01 GMT+11:00 Fernando Macedo <ferm...@gmail.com > <mailto:ferm...@gmail.com>>: > > Buenas a todos. Desde hace un tiempo estoy tratando de aplicar las > funciones de la familia *pply en todo lo que puedo, pero todav�a no es > algo que me surja tan r�pidamente o naturalmente al momento de los > loops > como usar for(). > Conozco las ventajas de usar estas funciones y por eso mi intento de > hacerme de ellas. > > Por ejemplo en este problema: > > data=matrix(rnorm(100*20),20,100) > col=sample(1:100,100) > > t1=Sys.time() > > medias=replicate(1000,{ > sel=sample(1:20,10) > pareja=sample(sel,100,replace = T) > ta=Sys.time() > *recep=NULL** > ** for(i in 1:100){** > ** n=col[i]** > ** m=pareja[i]** > ** c=data[m,n]** > ** recep=c(recep,c)** > ** }** > * tb=Sys.time() > media=mean(recep) > tt=tb-ta > c(media,tt) > }) > > t2=Sys.time() > > diftime=(t2-t1)[[1]] > > sum(medias[2,])/diftime > > > la parte que est� en negrita (si us� bien los Sys.time()) me > representa > (hice varias pruebas) aprox un 60% del tiempo total empleado. > > Mi pregunta es, para este ejemplo �c�mo plantear�an una soluci�n > usando > funciones *pply? > Y luego ver cuanto aumenta en el rendimiento del uso del tiempo. > > De paso, la salida que obtengo es una matriz de 2 por 1000, cuando > ser�a > m�s interesante una matriz de 1000 por 2. Si se usa simplify = F como > argumento de replicate() resulta en una lista. �Existe alg�n argumento > que directamente obtenga una matriz de 1000 por 2? (Esto �ltimo > pensando > en de repente 100000 o 1000000 de repeticiones y salidas m�s > complejas). > > > Saludos! > > -- > Fernando Macedo > > > [[alternative HTML version deleted]] > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org <mailto:R-help-es@r-project.org> > https://stat.ethz.ch/mailman/listinfo/r-help-es > > [[alternative HTML version deleted]]
_______________________________________________ R-help-es mailing list R-help-es@r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es