基于分解网络图各部分拓扑排序生成数据帧的迭代异常问题
解决分解图批量拓扑排序生成数据帧的问题
我看到你已经能成功处理单个分解后的子图,生成正确的拓扑排序数据帧,但批量迭代时出了问题。咱们先定位代码里的错误,再给出修正方案:
问题定位
你的迭代代码里有一个明显的变量名错误:
- 在生成
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) }))
预期输出示例
修正后的数据帧会包含子图标识,示例如下:
| id | id_order | activity_order | subgraph_id |
|---|---|---|---|
| 355 | 1 | 1 | 1 |
| 3180 | 3 | 2 | 1 |
| 6019 | 4 | 3 | 1 |
| 10672 | 2 | 4 | 1 |
| 49507 | 5 | 5 | 1 |
| ... | ... | ... | 2 |
这样你就能一次性得到所有分解子图的拓扑排序数据帧,每个子图的排序都独立正确,还能通过subgraph_id区分不同子图的结果。
内容的提问来源于stack exchange,提问作者Ashish




