Buenas tardes a todos. Mi problema es el siguiente: Calculo una muestra de unos índices (s) y a partir de esa muestra elijo aquellos elementos de una tabla de datos que tengo (en este caso XP4) que cumplen la condición de que el índice de XYP sea el de la muestra. Ahora comienza mi problema, la única forma que he encontrado para que me R me tome todos los elementos que necesito es creando un archivo (xs1) y convertirlo en una matriz, si no hago esto cuando llamo a los datos xs1 solo me aparece los datos pertenecientes al último índice. El problema es el que como tengo que hacer esto muchas veces el programa se ralentiza una barbaridad. ¿Hay alguna forma de arreglarlo sin tener que crear ficheros? #lo hace bien pero... s<- sample(M,m) sort(s)->s for (i in s) { subset(XP4,XYP[,1]==i)->xs1 write.table(xs1,file="xs1.txt",append=TRUE,row.names=FALSE,col.names=FALSE, quote = FALSE) } as.matrix(read.table("xs1.txt"))->xs1> xs1V1 V2 V3 V4 V5 V6 [1,] 1 0 1 0 0 0 [2,] 0 1 1 0 0 0 [3,] 1 0 1 0 0 0 [4,] 1 0 0 0 0 1 [5,] 0 1 1 0 0 0 [6,] 0 1 1 0 0 0 [7,] 1 0 1 0 0 0 [8,] 1 0 0 0 0 1 [9,] 0 1 0 1 0 0 [10,] 1 0 1 0 0 0 .... .... #lo hace mal...> for (i in s) {+ subset(XP4,XYP[,1]==i)->xs1 + }> xs1V1 V2 V3 V4 V5 V6 9055 0 1 1 0 0 0 -- Gracias y pasad un buen día de la Cruz (Fiesta en Granada) \|||/ (o o) +-----------------------oOOo-(_)-oOOo------------------------------+ | José Miguel Contreras García | | e-mail: jmcontreras en ugr.es | | | +----------------------oooO-------Oooo-----------------------------+
Hola José, lo que está haciendo R es devolverte la última iteración. Para evitar eso tenes que agregar un indice a xs1. j <- 1 for (i in s) { subset(XP4,XYP[,1]==i)->xs1[j,] j <- j+1 } Luciano El 3 de mayo de 2010 11:00, José Miguel Contreras García <jmcontreras@ugr.es> escribió:> Buenas tardes a todos. > > Mi problema es el siguiente: > > Calculo una muestra de unos índices (s) y a partir de esa muestra elijo > aquellos elementos de una tabla de datos que tengo (en este caso XP4) que > cumplen la condición de que el índice de XYP sea el de la muestra. Ahora > comienza mi problema, la única forma que he encontrado para que me R me > tome todos los elementos que necesito es creando un archivo (xs1) y > convertirlo en una matriz, si no hago esto cuando llamo a los datos xs1 > solo me aparece los datos pertenecientes al último índice. El problema es > el que como tengo que hacer esto muchas veces el programa se ralentiza una > barbaridad. ¿Hay alguna forma de arreglarlo sin tener que crear ficheros? > > > #lo hace bien pero... > > s<- sample(M,m) > sort(s)->s > > for (i in s) { > subset(XP4,XYP[,1]==i)->xs1 > write.table(xs1,file="xs1.txt",append=TRUE,row.names=FALSE,col.names=FALSE, > quote = FALSE) > } > as.matrix(read.table("xs1.txt"))->xs1 > > > xs1 > V1 V2 V3 V4 V5 V6 > [1,] 1 0 1 0 0 0 > [2,] 0 1 1 0 0 0 > [3,] 1 0 1 0 0 0 > [4,] 1 0 0 0 0 1 > [5,] 0 1 1 0 0 0 > [6,] 0 1 1 0 0 0 > [7,] 1 0 1 0 0 0 > [8,] 1 0 0 0 0 1 > [9,] 0 1 0 1 0 0 > [10,] 1 0 1 0 0 0 > .... > .... > > > > #lo hace mal... > > > for (i in s) { > + subset(XP4,XYP[,1]==i)->xs1 > + } > > xs1 > V1 V2 V3 V4 V5 V6 > 9055 0 1 1 0 0 0 > > -- > > > Gracias y pasad un buen día de la Cruz (Fiesta en Granada) > \|||/ > (o o) > +-----------------------oOOo-(_)-oOOo------------------------------+ > | José Miguel Contreras García | > > | e-mail: jmcontreras@ugr.es | > | | > +----------------------oooO-------Oooo-----------------------------+ > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >[[alternative HTML version deleted]]
Hola, ¿qué tal? No entiendo muy bien el proceso, pero creo que bastaría algo así como subset( XP4, XYP[,1] %in% s ) Si el proceso de filtrado es más complejo, se puede meter en la función foo y hacer algo así como xs1 <- do.call( rbind, sapply( vector.de.indices, foo ) ) Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El día 3 de mayo de 2010 16:16, Luciano Selzer <luciano.selzer en gmail.com> escribió:> Hola José, lo que está haciendo R es devolverte la última iteración. > Para evitar eso tenes que agregar un indice a xs1. > > j <- 1 > for (i in s) { > subset(XP4,XYP[,1]==i)->xs1[j,] > j <- j+1 > } > > > Luciano