Optimizing add_trace () in einer for-Schleife?

Ich benutze dasadd_trace () Funktion in einemzu loop zum Erstellen von Linien für ein 3D-Netzwerkdiagramm im scatter3d-Modus von plotly. Jedes add_trace zeichnet eine einzelne Linie zwischen zwei Knoten im Netzwerk. Die Methode funktioniert, aber bei einer großen Anzahl von Schleifen scheint sich die Geschwindigkeit der einzelnen Schleifen sehr schnell zu verlangsamen.

Beispieldaten können hier heruntergeladen werden:https: //gist.github.com/pravj/9168fe52823c1702a07

library(igraph)
library(plotly)

G <- read.graph("karate.gml", format = c("gml"))
L <- layout.circle(G)

vs <- V(G)
es <- as.data.frame(get.edgelist(G))

Nv <- length(vs)
Ne <- length(es[1]$V1)

Xn <- L[,1]
Yn <- L[,2]

network <- plot_ly(type = "scatter3d", x = Xn, y = Yn, z = rep(0, Ne), mode = "markers", text = vs$label, hoverinfo = "text", showlegend = F)

for(i in 1:Ne) {
  v0 <- es[i,]$V1
  v1 <- es[i,]$V2

  x0 <-  Xn[v0]
  y0 <-  Yn[v0]
  x1 <-  Xn[v1]
  y1 <-  Yn[v1]

  df <-  data.frame(x = c(x0, x1), y = c(y0, y1), z = c(0, 0))
  network <- add_trace(network, data = df, x = x, y = y, z = z, type = "scatter3d", mode = "lines", showlegend = F, 
                       marker = list(color = '#030303'), line = list(width = 0.5))
}

Dieses Beispiel ist ziemlich schnell, aber wenn ich ein paar hundert Kanten oder mehr einfüge, verlangsamt sich die Ausführung der einzelnen Schleifen drastisch. Ich habe verschiedene Optimierungsmethoden (Vektorisierung usw.) ausprobiert, aber anscheinend lässt sich die Langsamkeit der Funktion add_trace selbst nicht umgehen.

Irgendwelche Vorschläge

Antworten auf die Frage(2)

Ihre Antwort auf die Frage