You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于分解网络图各部分拓扑排序生成数据帧的迭代异常问题

解决分解图批量拓扑排序生成数据帧的问题

我看到你已经能成功处理单个分解后的子图,生成正确的拓扑排序数据帧,但批量迭代时出了问题。咱们先定位代码里的错误,再给出修正方案:

问题定位

你的迭代代码里有一个明显的变量名错误:

  • 在生成dfpart时,你用了ldply(topo, data.frame),但这里应该用当前子图对应的拓扑排序结果topopart,而不是之前单个子图的topo变量。

另外还有两个可以优化的点:

  • length(dg)代替clusters(g)$no来获取子图数量,更直接且不易出错
  • 建议添加subgraph_id列,用来区分不同子图的拓扑排序结果,后续分析更清晰

修正后的代码

g <- graph.data.frame(Data, directed = TRUE)
dg <- decompose.graph(g)

Newdata <- do.call("rbind", lapply(seq_along(dg), function(x){
  dgpart <- dg[[x]]
  # 对当前子图做拓扑排序
  topopart <- topological.sort(dgpart, mode = "out")
  # 注意这里要用topopart而不是之前的topo
  dfpart <- ldply(topopart, data.frame)
  colnames(dfpart) <- c("id", "id_order")
  dfpart$activity_order <- seq.int(nrow(dfpart))
  # 添加子图标识列
  dfpart$subgraph_id <- x
  return(dfpart)
}))

预期输出示例

修正后的数据帧会包含子图标识,示例如下:

idid_orderactivity_ordersubgraph_id
355111
3180321
6019431
10672241
49507551
.........2

这样你就能一次性得到所有分解子图的拓扑排序数据帧,每个子图的排序都独立正确,还能通过subgraph_id区分不同子图的结果。

内容的提问来源于stack exchange,提问作者Ashish

火山引擎 最新活动