2016-04-07 9 views
1

Ich habe eine Grafik g, die eine Reihe von Knoten/Scheitelpunkte enthält, die durch Kanten verbunden sind, jede der Kanten hat einen bestimmten numerischen Attributwert. Eine Kante Liste könnte wie folgt aussehen:Mit IGraph in R, wie berechnet man den höchsten/niedrigsten Kantenattributwert von denen, die mit jedem Eckpunkt verbunden sind?

v1 v2 att 
a b 17 
a c 6 
a d 2 
b c 9 

Für die Visualisierung ich die höchsten und niedrigsten att Zahlen zu jedem Eckpunkt verbunden hinzufügen muß (kommen oder gehen, Richtung spielt hier keine Rolle).

So zum Beispiel würde Ich mag v$max für eine bis auf 17 und v$min für ein bis 2, weil der größte att-Wert einer Verbindung zu einem 17 verbunden ist, und der kleinste ist 2.

ich habe versucht, einige Varianten entlang des Thema dieser:

V(g)$min=min(E(g)[incident(g,V(g), mode='total')]$att) 

Dies scheint in fast Recht sehr zu sein, dass es scheint, die richtige Antwort zu geben, wenn ich es auf einem einzelnen Knoten versuchen, wie in

min(E(g)[incident(g,V(g)[2], mode='total')]$att) 

aber es funktioniert nicht, wenn ich es über alle Knoten versuche. Ziel ist es, für jeden Knoten V(g)$min und V(g)$max zu setzen.

Antwort

1

hoffentlich ist dies kein Problem, Hausaufgaben, Sie fehlen nur die Verallgemeinerung Teil

library(igraph) 
library(plyr) 
df <- data.frame(read.table(text="v1 v2 weight 
a b 17 
a c 6 
a d 2 
b c 9", header=T)) 
df$weight <- as.numeric(df$weight) 

#transform df into igraph 
g <- graph.data.frame(df, directed=F, vertices=NULL)  

#for each vertex, get all incidental edges, weights and use range to find min & max 
ldply(V(g), function(v) range(incident(g, v, mode='total')$weight)) 
+0

Dank! Es ist kein Hausaufgabenproblem, nein, sondern vollständig selbstgewachsen (zeitliche Graphen). Ich bin ein Ingenieur, der ungefähr so ​​gebildet ist, wie ich es wahrscheinlich immer sein werde (obwohl er nicht so gebildet ist, wie ich es sein sollte, offensichtlich: namentlich lapply/ldply sind derzeit nicht mein Freund). Ich habe die Antwort akzeptiert: Nochmals vielen Dank! Übrigens, jede Idee, warum der ursprüngliche Ansatz nicht funktioniert? Ich finde es ein wenig verwirrend - kann den Fehler nicht sehen :) – socstuff

+0

Es kann funktionieren. Es fehlt nur die Verallgemeinerung. Sie können versuchen, sapply (1: Länge (V (g)), Funktion (n) min (E (g) [Vorfall (g, V (g) [n], Modus = 'total')] $ att)) – chinsoon12