首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中的图中寻找线性路径段

在R中的图中寻找线性路径段
EN

Stack Overflow用户
提问于 2016-04-04 17:06:10
回答 1查看 76关注 0票数 1

我需要将一个非循环图划分为线性部分。每个部分将是由至少一个节点组成的线性路径。线性部分不能包含任何分支。

例如,下面是一个示例图表:

代码语言:javascript
复制
library(igraph); 
dor = data.frame( from = c(1, 1, 2, 3, 4, 5, 6), 
    to = c(2, 3, 4, 5, 6, 6, 7) )
g = graph_from_data_frame(dor)
plot(g)

在此图中,有4个线性部分:

代码语言:javascript
复制
1
3 -> 5
2 -> 4
6 -> 7

如何将图划分为线性路径部分?

EN

回答 1

Stack Overflow用户

发布于 2017-09-01 05:07:15

我认为你想要做的是这样的。如果节点有多条传入边,请删除所有传入边。如果节点有多条传出边,请删除所有传出边。所以我提出的解决方案。对关联边进行计数,如果关联边太多,则将其删除。

代码语言:javascript
复制
## Your original data
library(igraph)
dor = data.frame( from = c(1, 1, 2, 3, 4, 5, 6), 
    to = c(2, 3, 4, 5, 6, 6, 7) )
g = graph_from_data_frame(dor)


g2 = g
TooManyOut = which(sapply(incident_edges(g2, V(g2), mode="out"), length) > 1)
for(TMO in TooManyOut) {
    g2 = delete_edges(g2, attr(incident_edges(g2, V(g2), mode="out")[[TMO]], "vnames"))
}
TooManyIn = which(sapply(incident_edges(g2, V(g2), mode="in"), length) > 1)
for(TMI in TooManyIn) {
    g2 = delete_edges(g2, attr(incident_edges(g2, V(g2), mode="in")[[TMI]], "vnames"))
}
plot(g2)

当然,您可以使用components获取连接的节点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36398502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档