2017-10-09 5 views
1

J'essaie d'appliquer la fonction is_matching dans le package igraph R. Je ne sais pas pourquoi ma réponse est toujours FAUX, même si c'est clairement une correspondance. Voici mon code:R igraph is_matching always False

library(igraph) 

relations=data.frame(from=c(1,2),to=c(3,4)) 
g <- graph_from_data_frame(relations, directed=FALSE, vertices=1:4) 
mm=c(1,3) 

is_matching(g,mm) 
[1] FALSE 

J'apprécie vraiment toute aide!

+0

Pouvez-vous s'il vous plaît fournir un meilleur exemple reproductible avec les bibliothèques nécessaires –

+0

Les deux fonctions utilisées dans cet exemple de jouet sont dans la bibliothèque (igraph) dans R. – Rocky

Répondre

0

Je ne sais pas pourquoi cela fonctionne et votre code ne pas parce qu'ils sont presque identiques, mais:

relations <- data.frame(from=c(1, 3),to=c(2,4)) 
g1 <- graph_from_data_frame(relations, directed=FALSE, vertices=c(1, 2, 3, 4)) 
mm <- c(2,1,4,3) 
is_matching(g1, mm) 
[1] TRUE 

La différence ici est que les sommets incident aux bords correspondants dans mm sont donnés en sens inverse commande, par exemple (1-> 2, 3-> 4) est (2,1,4,3). Ceci est étrange parce que, si je construire les directions de bord que vous avez (1-> 3, 2-> 4):

relations <- data.frame(from=c(1, 2),to=c(3,4)) 
g1 <- graph_from_data_frame(relations, directed=FALSE, vertices=c(1, 2, 3, 4)) 
mm <- c(3,1,4,2) 
is_matching(g1, mm) 
[1] FALSE 

Il est comme FALSE. J'ai essayé de déconstruire le code de la fonction et je n'ai pas pu le comprendre, principalement parce qu'il appelle des commandes qui ne semblent pas exister dans igraph, comme as.igraph.vs. Si quelqu'un peut faire la lumière sur ce sujet, ce serait formidable.