[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