Heute habe ich gelernt, dass igraph still Faktoren auf graph.data.frame verliert, daher werden Faktoren im Vertex-Datenrahmen in Zeichenvektoren umgewandelt. Gibt es einen Weg, den Faktortyp beizubehalten, z. B. für V(g)$factor_var
und df <- get.data.frame(g, what="vertices"); df$factor_var
? Im folgenden Code ist gender
der factor_var
:
actors <- data.frame(name=c("Alice", "Bob", "Cecil", "David", "Esmeralda"),
age=c(48,33,45,34,21),
gender=factor(c("F","M","F","M","F")))
relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David",
"David", "Esmeralda"),
to=c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"),
same.dept=c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE),
friendship=c(4,5,5,2,1,1), advice=c(4,5,5,4,2,3))
g <- graph.data.frame(relations, directed=TRUE, vertices=actors)
g_actors <- get.data.frame(g, what="vertices")
# Vergleiche den Typ von gender (vorher und nachher)
is.factor(actors$gender)
is.factor(g_actors$gender)
In diesem reproduzierbaren Beispiel ist actors$gender ein Faktor, aber g_actors$gender nicht. Meiner Meinung nach sollte es so sein. Ich fand keinen Kommentar zu diesem Problem in der Dokumentation.
Dies ist wichtig, weil beim Exportieren von Vertices über get.data.frame
für lineare Regression Faktoren verloren gehen (lineare Regression wandelt Faktoren in Dummy-Variablen um, ignoriert jedoch Zeichenvektoren). Mir fiel auf, dass meine Faktorvariablen im Output verschwanden.
Natürlich kann ich die Faktoren nach dem Exportieren von igraph neu erstellen, aber das ist mühsam, da ich viele Graphen habe und die Ordnung der Ebenen völlig falsch ist (und ich glaube nicht, dass es notwendig sein sollte, es sei denn, igraph kann dieses Verhalten nicht über seine C++- und Python-Versionen unterstützen).
Ryan