javier.ruben.marcuzzi en gmail.com
2016-Sep-03 22:47 UTC
[R-es] igraph V a partir de E y subgrafos
Estimados Tengo un problema. Con igraph creo una red a partir de un data.frame, las dos primeras columnas son V y las restantes E. Hay un trabajo anterior, yo me pregunté ¿Qué pasaría si las cosas hablaran entre ellas?, entonces hay un cruce de información de todos contra todos y elimino los nulos y duplicados. Al ver los listados E, V tienen la información. Hasta ahí estaría todo bien (me interesa puntos o cosas que aporten información, no la información). Ahora donde comienzan las complicaciones, conociendo una palabra (cosa) que está en E, quiero tener los V que la contienen. Ej, la relación A?B dentro de sus cosas tienen ?casa?, yo quiero un grafo con todos los V que tengan ?casa?. Tengo tres alternativas: Buscar a partir del índice que tiene la palabra ?Casa? idx <- match("Casa", V(datos.network)$name) res <- E(datos.network) [ from(idx) ] Pero esta forma no me gusta, porque idx 160 (resultado real) al ser reemplazado en from(idx) por from(160) da un resultado errado. Str(res) me resulta un poco ?feo?. La siguiente forma me es mucho más agradable a la vista> a <- E(datos.network)[[inc(?Casa?)]]Los veo como un data.frame, correcto, varias columnas, una por cada categoría de E y su palabra correspondiente. Pero plot(a) no grafica una red. No lo es.> b <- subgraph.edges(datos.network, E(datos.network)[[inc('Casa')]])Lo mismo, pero ahora es una red, lo grafico y me doy cuenta que faltan cosas, detecta el V que tiene el E, pero no toma ningún E de ese V que no coincida la palabra, en otra forma, A?B en la columna habitad tienen ?Casa? y en la columna transporte tienen ?Bicicleta?, bueno, no aparece nada de la información de esta última. Me interesa por ejemplo para colocar un color según el transporte.> c <- induced.subgraph(datos.network, E(datos.network)[[inc('Casa')]])Error in .Call("R_igraph_induced_subgraph", graph, vids - 1, impl, PACKAGE = "igraph") : At iterators.c:759 : Cannot create iterator, invalid vertex id, Invalid vertex id La última forma que se me ocurrió me da un error que comparto. Lo siguiente jj <-datos.network - E(datos.network)[E(datos.network)$habitad !="Casa"] Funciona correcto, pero al graficarlo crea una cantidad muy grande de puntos con unos pocos señalados (exagerando, como si en una galaxia marco el sistema solar). Todos los V quedan en el gráfico con un valor de 0 creo, se ven, no quiero que estén presentes, por eso si a todos les resto todos los que no son solo me quedan los que son, pero en el gráfico aparecen todos los puntos, solo marcados los que son. No es nada reproducible y posiblemente poco entendible, pero ¿alguien puede aportar un comentario a mi desorden? Desde ya, muchas gracias. Javier Rubén Marcuzzi [[alternative HTML version deleted]]
javier.ruben.marcuzzi en gmail.com
2016-Sep-05 17:08 UTC
[R-es] igraph V a partir de E y subgrafos
Estimados Encontré una solución, que no comprendo pero arregla uno de los problemas. En la preparación de datos tengo varias partes, al final realizo un cbind y luego un merge, esto da error, pero si realizo merge y luego cbind, no hay error (no se ?pierde eso que comenté en el correo anterior?). Luego igraph crea el grafo y el sub grafo que al graficar es correcto. Ahora, porqué esa diferencia, no tengo la menor idea. Solo queda el problema de> c <- induced.subgraph(datos.network, E(datos.network)[[inc('Casa')]])Error in .Call("R_igraph_induced_subgraph", graph, vids - 1, impl, PACKAGE = "igraph") : At iterators.c:759 : Cannot create iterator, invalid vertex id, Invalid vertex id Pero hay un avance, por lo menos regreso a la lógica de los libros, aunque me desconcierta el porqué esa diferencia al preparar el data.frame que luego es leído por igraph. En varios años con R y muchísimos errores, es lo primero que me sorprende sin entender nada. Javier Rubén Marcuzzi De: javier.ruben.marcuzzi en gmail.com [[alternative HTML version deleted]]
Estimado Javier, Me alegra que hayas avanzado con tu error. Te respondo a esto último. La función induced.subgraph() espera como segundo parámetro una lista de los IDs de los vértices, mientras que tú le estás pasando una lista de 'edges'. Prueba lo siguiente: c <- induced.subgraph(datos.network, which(V(datos.network)$name == 'Casa')) Si entendí bien todo, debería funcionar. Un saludo, *Luisfo Chiroque* /PhD Student | PhD Candidate IMDEA Networks Institute/ http://fourier.networks.imdea.org/people/~luis_nunez/ <http://fourier.networks.imdea.org/people/%7Eluis_nunez/> On 09/05/2016 07:08 PM, javier.ruben.marcuzzi en gmail.com wrote:> Estimados > > Encontré una solución, que no comprendo pero arregla uno de los problemas. > > En la preparación de datos tengo varias partes, al final realizo un cbind y luego un merge, esto da error, pero si realizo merge y luego cbind, no hay error (no se ?pierde eso que comenté en el correo anterior?). > > Luego igraph crea el grafo y el sub grafo que al graficar es correcto. > > Ahora, porqué esa diferencia, no tengo la menor idea. > > Solo queda el problema de > >> c <- induced.subgraph(datos.network, E(datos.network)[[inc('Casa')]]) > Error in .Call("R_igraph_induced_subgraph", graph, vids - 1, impl, PACKAGE = "igraph") : > At iterators.c:759 : Cannot create iterator, invalid vertex id, Invalid vertex id > > Pero hay un avance, por lo menos regreso a la lógica de los libros, aunque me desconcierta el porqué esa diferencia al preparar el data.frame que luego es leído por igraph. En varios años con R y muchísimos errores, es lo primero que me sorprende sin entender nada. > > Javier Rubén Marcuzzi > > De: javier.ruben.marcuzzi en gmail.com > [[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]]