[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