在 R 中,如何在节点之间随机生成边?
In R how do you randomly generate edges between nodes?
所以目前我使用下面的代码随机生成30个节点和151个连接。
g <- erdos.renyi.game(30, 151 , type = "gnm" , directed = F , loops = F)
但是,我想生成一个空图然后随机生成 151 条边。我该怎么做呢?有没有我可以添加到下面的代码?
g <- g <- graph.empty(30, directed = F)
您可以按照说明进行以下操作at the bottom of this page
g <- graph.empty(30, directed = F)
number_of_edges = 151
g <- g + edges(sample(V(g), number_of_edges*2, replace = T), color = "red")
但是,您似乎想要排除循环。您可以通过在不替换的情况下对 2 个节点进行 151 次采样来做到这一点,例如如下:
my_edges <- sapply(seq(number_of_edges),function(x) {sample(V(g),2,replace=F)})
g <- g + edges(my_edges, color = "red")
希望对您有所帮助!
EDIT: no duplicates edges.
要创建没有重复边的图,您可以先创建所有组合,然后从这些组合中采样:
x <- combn(V(g),2)
my_edges <- x[,sample(seq(dim(x)[2]),number_of_edges,replace=F)]
g <- g + edges(my_edges, color = "red")
所以目前我使用下面的代码随机生成30个节点和151个连接。
g <- erdos.renyi.game(30, 151 , type = "gnm" , directed = F , loops = F)
但是,我想生成一个空图然后随机生成 151 条边。我该怎么做呢?有没有我可以添加到下面的代码?
g <- g <- graph.empty(30, directed = F)
您可以按照说明进行以下操作at the bottom of this page
g <- graph.empty(30, directed = F)
number_of_edges = 151
g <- g + edges(sample(V(g), number_of_edges*2, replace = T), color = "red")
但是,您似乎想要排除循环。您可以通过在不替换的情况下对 2 个节点进行 151 次采样来做到这一点,例如如下:
my_edges <- sapply(seq(number_of_edges),function(x) {sample(V(g),2,replace=F)})
g <- g + edges(my_edges, color = "red")
希望对您有所帮助!
EDIT: no duplicates edges.
要创建没有重复边的图,您可以先创建所有组合,然后从这些组合中采样:
x <- combn(V(g),2)
my_edges <- x[,sample(seq(dim(x)[2]),number_of_edges,replace=F)]
g <- g + edges(my_edges, color = "red")