在igraph中设置顶点相邻边上限

时间:2014-12-23 07:28:35

标签: r igraph vertices edges degrees

我正在尝试使用某种任意大小的 igraph 绘制完整的图形。然后我想修剪每个顶点可以具有的相邻边的数量。我怎样才能做到这一点?

例如,如果我有一个包含20个顶点的完整图形,则每个顶点最初将具有19个相邻边。现在我想修剪这些边,使每个顶点最多有10个边。

修改

以下是我为此编写的当前代码。它倾向于形成断开的顶点和一小组连接的顶点。

library(igraph)
node_number = 20
g=erdos.renyi.game(node_number, 1)

testfun = function(g, maxVert, node_number){
  neighbor_nodes = NULL; delete_edge = NULL; delete_these = NULL
  total_nodes = 1:node_number

  for (i in 1:node_number){
    neighbor_nodes <- unlist(neighborhood(g, order = 1, nodes = total_nodes[i] ))
    neighbor_nodes[1] <- NA
    neighbor_nodes <- neighbor_nodes[!is.na(neighbor_nodes)]
    neighbor_nodes <- sample(neighbor_nodes, maxVert)

    delete_edge <- which(total_nodes%in%neighbor_nodes == FALSE)
    delete_edge <- which(delete_edge%in%total_nodes[i] == FALSE)

    for (j in 1:length(delete_edge)){
      if (isTRUE(edgeFinder(g, total_nodes[i], delete_edge[j]))){
        g = delete.edges(g, E(g, P=c(i, delete_edge[j])))
      }
    }
  }
  return(g)
}

edgeFinder = function(g, v1,v2){
    if (g[v1,v2] == 1){
     return(TRUE) 
    } else { return(FALSE) }
}

g2 = testfun(g, 10, node_number)

1 个答案:

答案 0 :(得分:2)

我能够使用以下方法解决这个问题。

library(igraph)     

SetEdge = rep(10, 20)
g=degree.sequence.game(SetEdge, method='vl')    
degree(g)
[1] 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10

我现在正在绘制一个包含10个相邻边的20个顶点的图形。比我最初的方法简单......