Wie würden Sie sogar eine Adjazenzliste in R darstellen? es benötigt Listen variabler Größe für den Satz benachbarter Knoten; Dann musst du eine Liste verwenden(); aber was nützt es dann in R?
ich kann mir lahme Tricks mit sapply-ähnlichen Funktionen vorstellen, aber sie machen einen linearen Scan für jeden Knoten. Aber spielen Sie für 1 Minute, hier ist: eine Liste der Kindermädchen, wo der zweite Gegenstand jedes Paares die Adjazenzliste ist. Ausgabe ist verrückter als die Datastruktur wirklich ist.
> edgelist=data.frame(A=c(1,1,2,2,2),B=c(1,2,2,3,4))
> library(plyr)
> llply(1:max(edgelist), function(a) list(node=a, adjacents=as.list(edgelist$B[edgelist$A==a])))
[[1]]
[[1]]$node
[1] 1
[[1]]$adjacents
[[1]]$adjacents[[1]]
[1] 1
[[1]]$adjacents[[2]]
[1] 2
[[2]]
[[2]]$node
[1] 2
[[2]]$adjacents
[[2]]$adjacents[[1]]
[1] 2
[[2]]$adjacents[[2]]
[1] 3
[[2]]$adjacents[[3]]
[1] 4
[[3]]
[[3]]$node
[1] 3
[[3]]$adjacents
list()
[[4]]
[[4]]$node
[1] 4
[[4]]$adjacents
list()
Guh. Ja. Das ist ein perfekter Liner. Seltsamerweise läuft meine for-Schleife-Lösung doppelt so schnell wie durch(). –
in der Tat ist es nicht sehr schnell, wenn Ihre Tabelle 50.000 lang ist (mit ~ 5000 Bezeichnern). Gibt es schnellere Alternativen? –