【问题标题】:Is there a way to allow for parallel edges in generating a random igraph network?有没有办法在生成随机 igraph 网络时允许平行边?
【发布时间】:2020-08-07 08:07:53
【问题描述】:

正如问题中所说。我的网络有很多平行边,例如一个有 18 个顶点和 693 条边。

LpOTb.dc.rd <- list()
for (x in seq_len(1000L)) {
  LpOTb.dc.rd[[x]] <- erdos.renyi.game(18, 
                                       693,
                                       type = "gnm",
                                       loops = T)
}

我想创建一个随机网络进行比较,但我不断收到错误消息:

Error in erdos.renyi.game(18, 693, type = "gnm", loops = T) : 
At games.c:703 : Invalid number (too large) of edges, Invalid value

我不希望简化我的网络并考虑随机边权重,主要是因为其中有 30 多个,我必须为我的网络重做所有指标。

【问题讨论】:

  • 18 个顶点只能有 171 条边(包括循环),除非您允许一对节点之间有多个边。我认为erdos.renyi.game 代码不允许这样做。通过使图有向,您可以得到 342 条非重复边。
  • 如何允许一对节点之间有多个边?
  • 我认为 erdos.renyi.game 代码不允许这样做。
  • 有不同的 igraph 代码吗?

标签: r igraph


【解决方案1】:

您可以使用graph_from_data_frame 生成您自己的包含 18 个顶点和 693 条边的随机图。为了匹配您上面的代码,我制作了一个允许循环的无向图。

library(igraph)
Start = sample(18, 693, replace=TRUE)
End   = sample(18, 693, replace=TRUE)
df = data.frame(Start, End)

g = graph_from_data_frame(df, directed=FALSE)
vcount(g)
[1] 18
ecount(g)
[1] 693

如果你想像这样生成多个图,可以模仿cmets中提到的previous answer中的代码。

library(igraph)
set.seed(1)
gs <- list()
for (x in seq_len(100L)) {
    Start = sample(18, 693, replace=TRUE)
    End   = sample(18, 693, replace=TRUE)
    df = data.frame(Start, End)
    gs[[x]]= graph_from_data_frame(df, directed=FALSE)
}

【讨论】:

  • 这太好了,谢谢!有没有办法像link 问题那样生成一系列它们?
  • 你总是想要 18 个顶点和 693 个边吗?还是链接中的随机数量的顶点?
  • 我总是想要 18 个顶点和 693 个边
猜你喜欢
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 2022-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多