Entschuldigung, ich bin ziemlich neu zu diesem igraph Paket Im Moment habe ich einen nicht einfachen Zyklus, und ich versuche, den Zyklus zu vereinfachen, indem Sie durch jeden Knoten gehen und Kanten löschen, die bestimmte erfüllen Kriterien. Ich habe ein paar Stunden an diesem Problem gearbeitet und würde mich über Vorschläge freuen, um dieses Problem zu lösen.Löschen von Kanten von igraph
Im Moment arbeite ich an einer Funktion, da die Knoten eines Graphen, dann wollen wir alle Kanten mit Länge beseitigen kleiner als die maximale Länge aller dieser Kanten von diesem bestimmten Vertex
df=data.frame(node("A","A","B","B","A"),edge("B","C","C","A","B"),length(1,1,1,1,10))
g<-graph_from_data_frame(df)
delete_extra_edges<-function(g,node){
list_of_incident_edges=incident_edges(g,node,"out")
max_quantity<-max(unlist(list_of_incident_edges[[1]]$length))
list_to_delete=which(list_of_incident_edges[[1]]$length<max_quantity)
for(index in list_to_delete){
g<-delete_edges(g,index) #or alternatively: g<-g-list_of_incident_edges[[1]][index]
}
return(g)
}
Die Problem mit dieser Methode ist, dass (abgesehen von der Tatsache, dass es immer noch mehrere Kanten behält, die die gleiche Länge wie die maximale Länge haben, aber ich werde später damit umgehen), der Index der list_to_delete nicht unbedingt die Kante ID in der entsprechen Grafik g.
Das Problem mit der alternativen Implementierung ist, dass es mir den Fehler
„Konnte nicht eine Kante von einem anderen Graphen verwenden“ich mit einem Testdatenrahmen bin gerade arbeiten gibt df wie oben
Hallo Sylvia, vielen Dank für die Hilfe! Eigentlich möchte ich alle Kanten löschen, die in list_to_delete indiziert sind. Aber ich habe es geschafft mit Grafik - list_of_incident_edges [[1]] [list_to_delete]. –
Richtig, tut mir leid. Das ging beim Kopieren verloren. Außerdem denke ich, dass du die Frage als beantwortet markieren solltest/akzeptiere eine Antwort, also wird sie als irgendwie gelöst markiert. – Sylvia