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>:

> 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
> 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

Reply via email to