Reputation: 490
I am attempting to draw a complete graph using igraph of some arbitrary size. I then want to trim the number of adjacent edges each vertice can have. How can I do this?
As an example, If I have a complete graph of 20 vertices, each vertice will originally have 19 adjacent edges. Now I would like to trim those edges so that each vertice has at most 10 edges.
EDIT
Below is the current code I've written for this. It tends to form disconnected vertices and a small cluster of connected vertices.
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)
Upvotes: 1
Views: 115
Reputation: 490
I was able to solve this using the following approach.
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
I'm now drawing a graph of 20 vertices with 10 adjacent edges. Simpler than my initial approach...
Upvotes: 2