【问题标题】:In R how do you randomly generate edges between nodes?在 R 中,如何在节点之间随机生成边?
【发布时间】:2017-11-19 16:00:10
【问题描述】:

所以目前我使用以下代码随机生成30个节点和151个连接。

g <- erdos.renyi.game(30, 151 , type = "gnm" , directed = F , loops = F)

但是,我想生成一个空图,然后随机生成 151 条边。我该怎么做呢?有没有我可以添加到下面的代码?

g <- g <- graph.empty(30, directed = F)

【问题讨论】:

    标签: r random igraph


    【解决方案1】:

    您可以执行以下操作,如 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")
    

    希望这会有所帮助!

    编辑:没有重复的边缘。

    要创建一个没有重复边的图形,您可以先创建所有组合,然后从中采样:

    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")
    

    【讨论】:

    • 效果很好。但是,我想知道如何删除两个节点之间的额外边缘。因为,有时当我运行此代码时,它会在两个节点(2~4)之间创建过多的边。我如何摆脱多余的边缘并使它们只有 1 而不会减少总边缘数?
    • 嗨,比尔,我添加了一个替代解决方案来解决这个问题,希望能更好地解决您的问题。如果没有,请告诉我!
    • 在哪里包含“无重复”代码?因为当我将它放在“2 个节点的 151 次采样”代码之后时,它似乎创建了我想要的实际边数的两倍?
    • 它替换了之前创建的 my_edges,因此请确保只执行一次 g
    • 当我使用这段代码时,我想知道是否有办法修改这段代码,使其成为一个节点产生的一组连接数? (假设来自节点 3 的 20 个连接)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    相关资源
    最近更新 更多