Hola Tengo un análisis en el que como resultado obtengo una lista recursiva, es decir, una lista cuyos componentes a su vez son listas. Son varias iteraciones de una función que proporciona varios resultados de interés de distinta naturaleza y por eso los uno en una lista. Las iteraciones son hechas en paralelo, y los resultados de una función de este tipo suelen ser empaquetados a su vez en una lista (Por ejemplo, ClusterApply del paquete snow ) Bueno, esto es para poner en situación el problema, porque el tema es mucho más general, y he tratado de sacarlo del contexto para que se pueda entender mejor. Digamos que tengo lo siguiente: una lista que tiene 2 listas con los mismos nombres de componentes (cada una de ellas serían los resultados de una iteración). Lo que quiero es tener vectores separados para a, b y c. El problema parece sencillo, pero no encuentro la forma de acceder bien a los elementos de la lista; y con el “unlist” lo junta todo y lo convierte a carácter, lo que no es muy útil. Al final, la única solución que he encontrado es con un “for”, pero me gustaría hacerlo de otra forma. Gracias w.list = list ( list ( a = 1 , b = 41:45 , c = c("X") ) , list ( a = 11 , b = 71:75 , c = c("Z") ) ) w.list a.all = NULL ; b.all = NULL; c.all = NULL for ( i in 1:2 ) { a.all = c ( a.all , w.list[[i]]$a ) b.all = c ( b.all , w.list[[i]]$b ) c.all = c ( c.all , w.list[[i]]$c ) } a.all b.all c.all [[alternative HTML version deleted]]
Hola Jesus, Intenta lo siguiente, donde "x" es tu "w.list": R> unlist(sapply(x, '[', 'a')) a a 1 11 R> unlist(sapply(x, '[', 'b')) b1 b2 b3 b4 b5 b1 b2 b3 b4 b5 41 42 43 44 45 71 72 73 74 75 R> unlist(sapply(x, '[', 'c')) c c "X" "Z" Saludos, Jorge.- 2015-01-29 22:37 GMT+11:00 Jesus Herranz <jesus.herranz en imdea.org>:> Hola > > Tengo un análisis en el que como resultado obtengo una lista recursiva, es > decir, una lista cuyos componentes a su vez son listas. Son varias > iteraciones de una función que proporciona varios resultados de interés de > distinta naturaleza y por eso los uno en una lista. Las iteraciones son > hechas en paralelo, y los resultados de una función de este tipo suelen ser > empaquetados a su vez en una lista (Por ejemplo, ClusterApply del paquete > snow ) > > Bueno, esto es para poner en situación el problema, porque el tema es mucho > más general, y he tratado de sacarlo del contexto para que se pueda > entender > mejor. Digamos que tengo lo siguiente: una lista que tiene 2 listas con los > mismos nombres de componentes (cada una de ellas serían los resultados de > una iteración). Lo que quiero es tener vectores separados para a, b y c. El > problema parece sencillo, pero no encuentro la forma de acceder bien a los > elementos de la lista; y con el "unlist" lo junta todo y lo convierte a > carácter, lo que no es muy útil. Al final, la única solución que he > encontrado es con un "for", pero me gustaría hacerlo de otra forma. > > Gracias > > > > w.list = list ( list ( a = 1 , b = 41:45 , c = c("X") ) , > > list ( a = 11 , b = 71:75 , c = c("Z") ) ) > > w.list > > > > a.all = NULL ; b.all = NULL; c.all = NULL > > for ( i in 1:2 ) > > { a.all = c ( a.all , w.list[[i]]$a ) > > b.all = c ( b.all , w.list[[i]]$b ) > > c.all = c ( c.all , w.list[[i]]$c ) > > } > > a.all > > b.all > > c.all > > > > > > > > > > > [[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 > >[[alternative HTML version deleted]]
mapply(c, w.list[[1]], w.list[[2]]) Si tienes más listas, simplemente las pones a continuación de la última y mapply te las une igual... Un saludo. Isidro Hidalgo Arellano Observatorio Regional de Empleo Consejería de Empleo y Economía http://www.jccm.es> -----Mensaje original----- > De: R-help-es [mailto:r-help-es-bounces en r-project.org] En nombre de > Jorge I Velez > Enviado el: jueves, 29 de enero de 2015 13:08 > Para: Jesus Herranz > CC: R-help-es > Asunto: Re: [R-es] Listas Recursivas > > Hola Jesus, > > Intenta lo siguiente, donde "x" es tu "w.list": > > R> unlist(sapply(x, '[', 'a')) > a a > 1 11 > R> unlist(sapply(x, '[', 'b')) > b1 b2 b3 b4 b5 b1 b2 b3 b4 b5 > 41 42 43 44 45 71 72 73 74 75 > R> unlist(sapply(x, '[', 'c')) > c c > "X" "Z" > > Saludos, > Jorge.- > > > 2015-01-29 22:37 GMT+11:00 Jesus Herranz <jesus.herranz en imdea.org>: > > > Hola > > > > Tengo un an lisis en el que como resultado obtengo una lista > > recursiva, es decir, una lista cuyos componentes a su vez son listas. > > Son varias iteraciones de una funci n que proporciona varios > > resultados de inter s de distinta naturaleza y por eso los uno en una > > lista. Las iteraciones son hechas en paralelo, y los resultados de > una > > funci n de este tipo suelen ser empaquetados a su vez en una lista > > (Por ejemplo, ClusterApply del paquete snow ) > > > > Bueno, esto es para poner en situaci n el problema, porque el tema es > > mucho m s general, y he tratado de sacarlo del contexto para que se > > pueda entender mejor. Digamos que tengo lo siguiente: una lista que > > tiene 2 listas con los mismos nombres de componentes (cada una de > > ellas ser an los resultados de una iteraci n). Lo que quiero es tener > > vectores separados para a, b y c. El problema parece sencillo, pero > no > > encuentro la forma de acceder bien a los elementos de la lista; y con > > el "unlist" lo junta todo y lo convierte a car cter, lo que no es muy > > til. Al final, la nica soluci n que he encontrado es con un "for", > > pero me gustar a hacerlo de otra forma. > > > > Gracias > > > > > > > > w.list = list ( list ( a = 1 , b = 41:45 , c = c("X") ) , > > > > list ( a = 11 , b = 71:75 , c = c("Z") ) ) > > > > w.list > > > > > > > > a.all = NULL ; b.all = NULL; c.all = NULL > > > > for ( i in 1:2 ) > > > > { a.all = c ( a.all , w.list[[i]]$a ) > > > > b.all = c ( b.all , w.list[[i]]$b ) > > > > c.all = c ( c.all , w.list[[i]]$c ) > > > > } > > > > a.all > > > > b.all > > > > c.all > > > > > > > > > > > > > > > > > > > > > > [[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 > > > > > > [[alternative HTML version deleted]]