[R-es] igraph V a partir de E y subgrafos

javier.ruben.marcuzzi en gmail.com javier.ruben.marcuzzi en gmail.com
Dom Sep 4 00:47:02 CEST 2016


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]]



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