Ich habe hier einen guten Ratschlag bekommen, wie man Nachbarn nach einer Liste von Netzwerkknoten sucht. Siehe: lapply function to look up neighbors in igraph (when not all nodes are found)Generiere eine Liste von Nachbarn zweiten Grades mit Hilfe von lapply und igraph
Jetzt muss ich das gleiche mit Nachbarn zweiten Grades tun. Das Ersetzen dieser Schleife durch ego
oder neighborhood
führt jedoch zu einem Fehler.
edgelist <- read.table(text = "
A B
B C
C D
D E
C F
F G")
testlist <- read.table(text = "
A
H
C
D
J")
testlist2 <- read.table(text = "
A
C
B
D
E")
library(igraph)
graph <- graph.data.frame(edgelist)
str(graph)
get_neighbors <- function(graph, n) {
do.call(rbind, lapply(n, function(x) {
if (x %in% V(graph)$name) {
nb <- neighborhood(graph,2, x) ##HERE##
if (length(nb) > 0) {
data.frame(lookupnode=x,
neighbor=nb$name, # h/t @MrFlick for this shortcut
stringsAsFactors=FALSE)
} else {
data.frame(lookupnode=x, neighbor=NA, stringsAsFactors=FALSE)
}
} else {
data.frame(lookupnode=x, neighbor=NA, stringsAsFactors=FALSE)
}
}))
}
A=get_neighbors(graph, as.character(testlist$V1))
Fehler bei data.frame (lookupnode = x, Nachbar = nb $ name, stringsAsFactors = false): Argumente implizieren unterschiedliche Anzahl der Zeilen: 1, 0
entnehme ich, das Problem ist, dass Ego und Nachbarschaft kann nicht direkt in einen Datenrahmen gezwungen werden. Ich kann unlist
verwenden und dann einen Datenrahmen einfügen, aber die Werte, die ich will, enden als row.names
nicht Werte, die ich in meine Ausgabe setzen kann.
Wie kann ich eine Ausgabe von Nachbarn zweiten Grades erstellen?
Funktioniert wie ein Charme. Ich musste 'Namen' hinzufügen, um die' row.names' zu ziehen. – Danielle