2016-04-22 1 views
1

Peut-on trouver les voisins communs de toutes les paires de sommets dans un graphe sans boucle en utilisant R?Peut-on trouver les voisins de tous les sommets dans un graphique sans boucle en utilisant R?

Par exemple, nous utilisons la commande suivante pour trouver les communes voisines du noeud 1 et 2 dans le graphique TD1:

intersect(neighborhood(graph=TD1,order=1,nodes=1),neighborhood(graph=TD1,order=1,nodes=2))

Mais je dois trouver les voisins communs de tous les paires de sommets et parce que le graphique est grand en utilisant une boucle prend beaucoup de temps! Y a-t-il une fonction pour cette procédure?

Répondre

0

nous pouvons utiliser le graphique d'adjacence pour obtenir une matrice clairsemée montrant les connexions. Ensuite, convertissez-le en data.table pour rejoindre par les voisins. Ensuite, concaténer les voisins par des paires de sommets où les sommets ne sont pas identiques et où les paires de sommets ne sont pas répétées

library(data.table) 
library(igraph) 
numVer <- 5 
g <- erdos.renyi.game(numVer, 1) 
plot(g) 

adjSM <- as(get.adjacency(g), "dgTMatrix") 
adjDT <- data.table([email protected]+1, [email protected]+1) 
res <- adjDT[adjDT, nomatch=0, on="V2", allow.cartesian=TRUE 
      ][V1 < i.V1, .(Neighbours=paste(V2, collapse=",")), 
       by=c("V1","i.V1")][order(V1)] 
res