come rappresenterebbe una lista di adiacenza in R? ha bisogno di elenchi di dimensioni variabili per l'insieme di nodi adiacenti; quindi allora devi usare una lista(); ma allora a cosa serve averlo in R?
Posso pensare a trucchi lame con funzioni simil-ma, ma eseguono una scansione lineare per ogni nodo. ma giocando per 1 minuto, ecco: una lista di pairlist, dove il secondo elemento di ogni coppia è la lista di adiacenza. l'output è più folle di quanto lo sia la struttura dati.
> 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()
fonte
2009-07-11 21:55:28
Guh. Sì. Questo è un perfetto rivestimento. Stranamente, la mia soluzione for loop viene eseguita due volte più velocemente di(). –
infatti non è molto veloce quando la tua tabella è lunga 50.000 (con ~ 5000 identificatori). Ci sono alternative più veloci? –