[R-es] Almacenamiento de información (matriz en matriz) e iteradores

Carlos J. Gil Bellosta cgb en datanalytics.com
Mie Feb 20 20:06:26 CET 2013


Hola, ¿qué tal?

Creo que te bastaría con una tabla (un dataframe estándar) para
almacenar tu información. No necesitas llenar tu espacio de trabajo de
objetos inconexos (matrices independientes).

Luego, las funciones ddply y similares del paquete plyr te servirían
para procesar la información por, p.e., parada de manera muy limpia.

Un saludo,

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


El día 20 de febrero de 2013 05:20, Alejandro Ayala
<alejo.ayalab en gmail.com> escribió:
> Saludos, me encuentro realizando una simulación de una red de transporte
> (paradas, líneas de frecuencia, usuarios, etc), para lo cual necesito el
> almacenamiento de información de forma matricial.
>
> El sistema cuenta con un numero determinado de paradas (38 paradas), en
> donde cada parada representa una matriz la cual tiene asociada la llegada
> de pasajeros, el tiempo en el cual llegaron, el déstino y otros atributos
> más, mi pregunta es que si existe alguna paquete o forma de almacenar esta
> información a manera de una "super matriz", donde cada componente de una
> matriz simple representa una nueva matriz, algo similar a lo que en física
> se denomina tensor.
>
> Mi otra pregunta radica en como asignar valores mediante iteración a las
> componentes de una matriz de acuerdo al cumplimiento de ciertas
> condiciones, tengo el siguiente código
>
> for (i in 5:23)   # creación de 19 matrices nulas con subindices 5 6 7...23
> {
>   mat.i<-paste("mat",i,sep="")
>   assign(mat.i,matrix(0,32,32))
>   data.matrix(mat.i)
> }
>
> # Mediante
> for (i in 1:32){  # iterador para realizar operaciones sobre cada fila de
> la matriz deseada
>   isup.i<-paste("isup",i,sep="")
>   if ((sum(m_sup5[i,])==0) | (sum(m_sup6[i,])==0) | (sum(m_sup7[i,])==0)){
>   # hace referencia a matrices (m_sup5, m_sup6,....) donde algunas filas
> tienen componentes nulas (cero)
>     mat5[i,]=0
>     mat6[i,]=0
>     mat7[i,]=0}
>   else {
>
> mat5[i,]<-assign(isup.i,as.vector(m_sup5[i,]/sum(m_sup5[i,]),mode="numeric"))
>
> mat6[i,]<-assign(isup.i,as.vector(m_sup6[i,]/sum(m_sup6[i,]),mode="numeric"))
>
> mat7[i,]<-assign(isup.i,as.vector(m_sup7[i,]/sum(m_sup7[i,]),mode="numeric"))
>    }}
>
> El anterior codigo funciona con condiciones de hasta 3 matrices 5, 6 y 7 a
> partir de 8 me arroja un error. Como podría reemplazar este código mediante
> otro iterador que me reconozca el subíndice de la matriz que estoy
> trabajando y adicionalmente me realice la operación deseada sobre cada
> componente de la fila de la matriz trabajada en ese momento.
>
> Necesito un código similar a:
>
> for (j in 5:23){
> for (i in 1:32){
> isup.i<-paste("isup",i,sep="")
> if ((sum(m_supj[i,]==0)) # utilizando el subíndice "j" que reemplace a las
> matrices de 5 a 23
> else
> {
> matj[i,]<-assign(isup.i,as.vector(m_supj[i,]/sum(m_supj[i,]),mode="numeric"))
> }
> }}
>
> Los errores que me arroja son de tipo que no existe relación al objeto que
> se quiere almacenar, incoherencia en las dimensiones, la función assign()
> no asigna valores adecuados,etc, lo he intendado todo lo que se me a
> ocurrido sin ningun resultado favorable, algun comentario o ayuda??
>
> Muchas gracias por su respuesta
>
>         [[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