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

Responder a