[R-es] Como calcular la media de una gran cantidad de flow.frame en un ciclo "for" ...

Carlos J. Gil Bellosta cgb en datanalytics.com
Vie Dic 23 19:41:26 CET 2011


Hola, ¿qué tal?

Divide y vencerás: soluciona tu problema sólo para un fichero y un
solo objeto de tipo flowFrame. Cuando lo sepas resolver para uno solo,
ensaya a meter tu código en un bucle.

Objetos del tipo que me cuentas suelen tener un método, exprs(), que
extraen la matriz de datos (obviando los metadatos). Si sabes resolver
tu problema sobre una matriz, sabrás resolverlo sobre exprs( tu.objeto
), que es otra matriz.

Un saludo,

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


El día 23 de diciembre de 2011 19:26, Eric <ericconchamunoz en gmail.com> escribió:
> Hola Carlos ... soy nuevo en el uso de R (comence hace un par de meses) y
> aun estoy comprendiendo la logica de trabajo del programa ... voy a explicar
> lo del codigo pero antes un par e aclaraciones:
> 1. Tengo muchos archivos que provienen de las lecturas de muestras en un
> citometro, todos comienzan con el prefijo "dat" y el dia en que se hizo la
> lectura que fue el 12, es decir, con "dat12", por eso el filtro en el
> comando ls(pattern="dat12").
> 2. Los archivos .FCS (de FlowCytometry) son del tipo flowFrame, el que
> permite guardar los datos leidos por el citometro (estos van en una matriz)
> y ademas permite guardar una especie de metadatos que caracterizan la
> informacion, la descripcion completa aparece en ?flowFrame. Asi es que para
> poder usar los datos de la matriz contenida en el flowFrame hay que usar la
> funcions exprs() que la extrae ...
>
> entonces, para calcular una sola media por ahora (luego agregamos la otra):
>
> 1 crear un vector llamado "lista" que contendra la lista de archivos que se
> van a usar
> 2. crear el vector que contendra las medias, este posee tantas filas como
> numero de archivos a usar (dado por el largo de "lista")
> 3. calcular la media de la columna de interes en el archivo de interes
> 4. asignar esta media a una fila del archivo creado en el punto 2
> 5. repetir los pasos 3 y 4 para todos los archivos de la "lista".
>
> El seudo codigo que me indicas es mas o menos lo mismo que trate de hacer
> ... el problema es como construir correctamente el nombre de cada archivo
> para acceder correctamente a la columna de interes dentro del flowFrame, eso
> es lo que falla creo ...
>
> Saludos y gracias,
>
> eric.
>
>
>
>
> 2011/12/23 Carlos Ortega <cof en qualityexcellence.es>
>>
>> Hola,
>>
>> Disculpa, tengo alguna duda de cómo llegas al código que propones.
>> Parece como si ya tuvieras en memoria los 100 ficheros (objetos)... y por
>> otro lado no sé qué es la función "exprs()".
>>
>> Dand un paso para atrás, para estar en el mismo contexto, mira si este
>> pseudo-código de cómo tratar el problema es válido para tu problema:
>>
>> conseguir listado de ficheros con un patrón determinado de nombre
>> para cada fichero
>>   conseguir la media de la segunda columna med.seg
>>   conseguir la media de la sexta columna
>>      incluir la media de la 6 columna como un nuevo elemento de un vector
>> v.med
>> crear un data.frame con el vector v.med y med.seg
>>
>> Saludos,
>> Carlos Ortega
>> www.qualityexcellence.es
>>
>> El 23 de diciembre de 2011 03:56, Eric <ericconchamunoz en gmail.com>
>> escribió:
>>
>>> Hola, habia encontrado lo que me señalas y lo cambie sin resultados
>>> positivos, me aparece el mismo error ... si alguien tiene alguna otra
>>> idea
>>> para probar estare agradecido :)  ...
>>>
>>> Saludos, eric.
>>>
>>> pd. cdo uno selecciona "contestar a todos" se abre otro hilo o es la
>>> forma
>>> correcta de contestar??
>>>
>>>
>>>
>>>
>>> 2011/12/22 Carlos J. Gil Bellosta <cgb en datanalytics.com>
>>>
>>> > Hola, ¿qué tal?
>>> >
>>> > No conozco los detalles del objeto al que te refieres, pero creo que
>>> > la expresión adecuada no es
>>> >
>>> > exprs(lista[i][,5]))
>>> >
>>> > sino
>>> >
>>> > exprs( lista[[i]] )[,5]
>>> >
>>> > Un saludo,
>>> >
>>> > Carlos J. Gil Bellosta
>>> > http://www.datanalytics.com
>>> >
>>> > El día 22 de diciembre de 2011 17:57, Eric <ericconchamunoz en gmail.com>
>>> > escribió:
>>> > > Queridos amigos tengo el siguiente problema:
>>> > >
>>> > > Tengo alrededor de 100 archivos del tipo flowFrame (datos de
>>> > > citometria)
>>> > > que he importado a R. Estos archivos tienen 6 columnas y 10.000 (diez
>>> > mil)
>>> > > filas. Tengo que calcular el promedio de la quinta columna y
>>> > > graficarlo
>>> > > contra el promedio de la segunda columna. La segunda columna tiene el
>>> > mismo
>>> > > valor para las 10.000 filas en cada archivo asi es que sabemos el
>>> > promedio
>>> > > de antemano, pero quiero incluirlo en el calculo de todos modos. Para
>>> > > calcular las medias he creado el siguiente nano-algoritmo que incluye
>>> > > un
>>> > > ciclo "for" :
>>> > >
>>> > > lista <- ls(pattern="dat12")    # para usar solo los archivos que son
>>> > > del
>>> > > mes 12 que son alrededor de 100
>>> > > medias <- c(1:length(lista))
>>> > > for (i in length(lista)){
>>> > > medias[i] <- mean(exprs(lista[i][,5]))
>>> > > }
>>> > >
>>> > > pero obtengo el siguiente error:
>>> > >
>>> > > Error in exprs(lista[i][, 5]) :
>>> > >  error in evaluating the argument 'object' in selecting a method for
>>> > > function 'exprs': Error in lista[i][, 5] : incorrect number of
>>> > > dimensions
>>> > >
>>> > > parece que usar *lista[i][,5]* como argumento de la funcion exprs es
>>> > > un
>>> > > error , porque lista[i] no se comporta como un nombre de archivo como
>>> > > yo
>>> > > crei que haria y esto es lo que no se como hacer, es decir, como se
>>> > > hace
>>> > > para poder utilizar los nombres contenidos en el vector "lista" y
>>> > construir
>>> > > el argumento de la funcion "exprs" correctamente ... o como se puede
>>> > hacer
>>> > > de otro modo esto mismo??
>>> > >
>>> > > me explico bien ??
>>> > >
>>> > > entre parentesis es la primera vez que trato de hacer un ciclo en R y
>>> > quiza
>>> > > hasta eso este mal ...
>>> > >
>>> > > Saludos y muchas gracias por su ayuda,
>>> > >
>>> > > Eric.
>>> > >
>>> > >
>>> > >
>>> > >
>>> > >
>>> > >
>>> > >
>>> > > --
>>> > > Nota: las tildes se han omitido para evitar conflictos con algunos
>>> > lectores
>>> > > de correo.
>>> > >
>>> > > * Un economista es un experto que sabrá mañana por qué las cosas que
>>> > predijo
>>> > > ayer no han sucedido hoy (Laurence Peter).
>>> > >
>>> > > * SATYÂT NÂSTI PARO DHARMAH
>>> > >
>>> > >        [[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
>>> > >
>>> >
>>>
>>>
>>>
>>> --
>>> Nota: las tildes se han omitido para evitar conflictos con algunos
>>> lectores
>>> de correo.
>>>
>>> * Un economista es un experto que sabrá mañana por qué las cosas que
>>> predijo
>>> ayer no han sucedido hoy (Laurence Peter).
>>>
>>> * SATYÂT NÂSTI PARO DHARMAH
>>>
>>>        [[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
>>>
>>
>
>
>
> --
> Nota: las tildes se han omitido para evitar conflictos con algunos lectores
> de correo.
>
> * Un economista es un experto que sabrá mañana por qué las cosas que predijo
> ayer no han sucedido hoy (Laurence Peter).
>
> * SATYÂT NÂSTI PARO DHARMAH
>



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