[R-es] Buscando la solución más eficiente para generar resultados a partir de un list

Carlos J. Gil Bellosta cgb en datanalytics.com
Mie Mar 7 21:02:17 CET 2012


Bueno, reutilizando los tres pasos que te indicaba en el correo, previo,

> 1) Parte de una función simple que, a partir de una serie y periodo
> calcule tu parámetro de interés.
> 2) Crea una función que aplique (1) a una serie de periodos
> (seguramente, un sapply de la anterior).
> 3) Crea una función que aplique (2) a un sujeto (posiblemente, una
> lectura de series y de periodos).

lo que deberías hacer es:

a) Que (2) capturase (¿en un vector?) los parámetros calculados en
(1). La función sapply lo hace automáticamente.
b) La función (2) los devuelve al nivel superior (en el return).
c) La función que aparece en (3) añade a su argumento (el bloque de
información del sujeto) la salida de (2).

La salida del último lapply sería una lista con campos sujeto, serie,
periodo, parámetros (y la longitud de periodo y parámetros sería
igual).

De todos modos, igual sería más sencillo crear una tabla
"desnormalizada" donde tuvieses las columnas

nombre, serie, periodo

serie se repetiría tantas veces como periodo y nombre tantas como
series-periodo. Ej.:

carlos serie1 periodo1
carlos serie1 periodo2
carlos serie2 periodo1
carlos serie2 periodo2

Podrías recorrer esa estructura de datos fácilmente y crear una última
columna de parámetros. Igual te resulta más sencillo plantear tu
problema así (en lugar de recorrer un árbol).

Un saludo,

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


El 7 de marzo de 2012 20:50, Ana Pérez V. <anapv78 en yahoo.es> escribió:
>
> Hola:
>
> Gracias, Carlos. Me has iluminado.
>
> Ahora quería ir un paso más allá. Vamos a ver... Supongamos que a cada
> serie y período le aplico una función cuyo resultado debo utilizar para un
> cálculo posterior; es decir, el cálculo posterior tiene en cuenta la serie,
> el período y el valor obtenido en el cálculo previo. Por tal motivo, me
> interesaría que ese valor obtenido que voy a necesitar me quedase
> incorporado en la lista de partida, esto es, dentro de cada componente
> (junto con la serie y el período). ¿Cómo puedo lograrlo?.
>
> Gracias.
>
> Saludos
> Ana
>
> --- El mar, 6/3/12, Carlos J. Gil Bellosta <cgb en datanalytics.com>
> escribió:
>
>
> De: Carlos J. Gil Bellosta <cgb en datanalytics.com>
> Asunto: Re: [R-es] Buscando la solución más eficiente para generar
> resultados a partir de un list
> Para: "Ana Pérez V." <anapv78 en yahoo.es>
> CC: "r-help-es en r-project.org" <r-help-es en r-project.org>
> Fecha: martes, 6 de marzo, 2012 14:35
>
>
> Hola, ¿qué tal?
>
> Te recomendaría que, en lugar de ir de arriba para abajo, fueses de
> abajo para arriba:
>
> 1) Parte de una función simple que, a partir de una serie y periodo
> calcule tu parámetro de interés.
> 2) Crea una función que aplique (1) a una serie de periodos
> (seguramente, un sapply de la anterior).
> 3) Crea una función que aplique (2) a un sujeto (posiblemente, una
> lectura de series y de periodos).
>
> Y aplícala a tu lista de sujetos con un lapply.
>
> Un saludo,
>
> Carlos J. Gil Bellosta
> http://www.datanalytics.com
>
>
>
>
>
>
> El día 6 de marzo de 2012 13:41, Ana Pérez V. <anapv78 en yahoo.es> escribió:
> > Hola:
> >
> > Tengo una lista de 2 elementos, cada uno de los cuales contiene
> > información relativa a un sujeto (Pablo y Carlos).
> >
> > lSujetos <- list()
> > lSujetos[[1]] <- list(nomfich="Pablo", colTime=5, colVars=c(6,7,8))
> > lSujetos[[2]] <- list(nomfich="Carlos", colTime=5, colVars=c(6,7,8))
> >
> > A continuación, leo las series temporales correspondientes a cada
> > individuo. En este caso leo, para cada individuo, las series
> > correspondientes a las columnas de las posiciones 6, 7 y 8 en el fichero:
> >
> > misSeries <- lapply(lSujetos, leeSeries)
> >
> > siendo leeSeries la función que se encarga de recoger esas series.
> >
> > Como consecuencia de lo anterior, en "misSeries" tengo 2 elementos
> > principales y cada uno tiene 3 subelementos (uno por serie temporal).
> >
> > Pues bien, sobre esta variable (misSeries) debo aplicar diferentes
> > funciones para obtener diversos parámetros.
> >
> > Un ejemplo:
> > resul <- lapply(series, function(x) lapply (x, AnalisisMacroscopico))
> >
> > Pues bien: exactamente esos resultados no los debo generar para cada
> > serie, sino para cada serie y período, pudiendo existir más de un período
> > (supongamos 5 períodos); de tal modo que debo volcar en fichero una tabla de
> > resultados que tenga exactamente N*3*5 = 30 filas, siendo N el número de
> > individuos (en este caso N=2).
> >
> > ¿Cuál es la manera más eficiente de hacerlo?. Me refiero a la manera de
> > meter en juego al vector de posibles períodos, y a la manera de aplicar las
> > funciones pensando en que el objetivo es mostrar esa tabla de resultados.
> >
> > Espero no haberme extendido demasiado.
> >
> > Gracias.
> >
> > Un saludo.
> >        [[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