R: wykresy „łączące”

Nov 24 2020

Używając R, stworzyłem i wykreśliłem wykres:

library(igraph)
library(igraphdata)
data(karate)

#cluster
cfg <- cluster_fast_greedy(karate)

#plot entire graph
plot(cfg, karate)

#plot first subgraph

a = induced_subgraph(karate, cfg[[1]])
plot(a)

#plot second subgraph

b = induced_subgraph(karate, cfg[[2]])
plot(b)

#plot third subgraph

c = induced_subgraph(karate, cfg[[3]])
plot(c)

Czy można napisać jakiś kod pokazujący, który wykres jest powiązany z którym wykresem?

Przykład: zielony wykres jest połączony z pomarańczowym i fioletowym. fioletowy wykres jest połączony tylko z zielonym wykresem. a pomarańczowy wykres jest połączony z zielonym wykresem

(„a” to pomarańczowy wykres, „b” to zielony wykres, „c” to fioletowy wykres)

b: c i a

c: b

a: b

Odpowiedzi

1 BenNutzer Nov 25 2020 at 08:58

W przypadku binarnym, w którym pytanie brzmi, czy istnieje połączenie między społecznościami, możesz wykonać następujące czynności. Po pierwsze, zawieraj umowy ze społecznościami na podstawie ich przynależności (przynależności do „a”, „b” lub „c”).

V(karate)$mem <- membership(cfg)
g <- contract.vertices(karate, V(karate)$mem, vertex.attr.comb = "ignore")

Po drugie, usuń pętle i wiele krawędzi:

g <- simplify(g)

Na koniec wyodrębnij sąsiednie węzły (które teraz są równe społeczności po zawarciu ich powyżej):

sapply(1:vcount(g), function(x) adjacent_vertices(g, x))