[R-es] Familia *pply
Fernando Macedo
fermace en gmail.com
Jue Mar 19 01:01:08 CET 2015
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]]
Más información sobre la lista de distribución R-help-es