[R-es] Familia *pply

Carlos J. Gil Bellosta cgb en datanalytics.com
Jue Mar 19 02:44:32 CET 2015


Hola, ¿qué tal?

Puedes hacer

data <- matrix(rnorm(100 *20), 100, 20)

medias <- replicate(1000,{
  sel <- sample(1:20,10)
  tmp <- data[cbind(sel, sample(sel,100,replace = T))]
  mean(tmp)
})

Mira el párrafo de ?"]" que comienza diciendo "A third form of indexing..."

Un saludo,

Carlos J. Gil Bellosta
http://www.datanalytics.com


El día 19 de marzo de 2015, 1:01, Fernando Macedo <fermace en gmail.com> escribió:
> 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 en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es



Más información sobre la lista de distribución R-help-es