【问题标题】:Is it possible with igraph in R to delete subgraphs that do not meet certain conditions?R中的igraph是否可以删除不满足某些条件的子图?
【发布时间】:2019-10-30 20:28:57
【问题描述】:

我想创建一个子图,其中包含由至少一个红色节点和一个绿色节点组成的所有集群/组。但是,集群仍应包括灰色节点,以防特定集群中也存在灰色节点。

library (igraph)

#### Random graph #####
set.seed(123) #reproduction
g <- erdos.renyi.game(75,1/75, directed =  F, loops = F)

#### simple random sample from graph object #####
set.seed(123) #reproduction
smpl1 <- sample(1:vcount(g),20)
smpl2 <- sample(1:vcount(g),20)

##### add colours #####
V(g)$color = "green"
V(g)[smpl1]$color = "red"
V(g)[smpl2]$color = "grey"

set.seed(123) #reproduction
plot(g,
     vertex.label.color = "Black",
     vertex.size = 10,
     layout = layout.fruchterman.reingold(g))

使用上面的代码,预期的输出是一个图,其中包括剩余的(四个)集群,这些集群至少有一个绿色和一个红色节点。

【问题讨论】:

  • 您说“我想创建一个子图,其中包括由至少一个红色和一个绿色节点组成的所有集群/组。”。当您说集群时,您是指连接的组件吗?

标签: r igraph subgraph


【解决方案1】:

当您说“我想创建一个子图,其中包含由至少一个红色和一个绿色节点组成的所有集群/组。”,我假设您的意思是连接的组件。因此,重申一下,您想要由所有灰色节点以及包含至少一个红色和一个绿色节点的连通组件中的那些节点诱导的子图。

做到这一点并不难。首先计算连通分量。列出要保留并生成子图的节点列表。

CG = components(g)
KeepNodes = which(V(g)$color == "grey")
for(i in 1:max(CG$membership)) {
    CompNodes = which(CG$membership == i)
    if(any(V(g)$color[CompNodes] == "green") + 
        any(V(g)$color[CompNodes] == "red") == 2) {
        KeepNodes = union(KeepNodes, CompNodes) }
}
SubGraph = induced_subgraph(g, KeepNodes)
plot(SubGraph)

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    相关资源
    最近更新 更多