【问题标题】:Printing edge list with node degrees using igraph in R在R中使用igraph打印带有节点度的边缘列表
【发布时间】:2023-03-20 09:45:02
【问题描述】:

我是使用 igraph 和 R 的新手,想要做以下事情:

1) 计算路径长度分布。我可以使用库中的直接函数找到平均路径长度,但是如何为每对顶点执行此操作,以便获得路径长度分布?

2) 我想找出所有度数高于邻居的节点。我尝试将 E() 函数与 degree() 结合使用,但它不起作用。

谢谢

【问题讨论】:

    标签: r igraph


    【解决方案1】:

    对于 2),它实际上更简单、更快并且在我看来更易读:

    g <- graph.formula(1-2-3-4, 2-5)
    degs <- degree(g)
    sapply(V(g), function(x) all(degs[neighbors(g, x)] < degs[x]))
    # [1] FALSE  TRUE FALSE FALSE FALSE
    

    【讨论】:

      【解决方案2】:

      1) 可以使用path.length.hist解决:

      g <- graph.data.frame(data.frame(a=c(1:3),b=c(2:4)),directed=FALSE)
      plot(g)
      
      ## (1)--(2)--(3)--(4)
      
      out <- path.length.hist(g,directed=FALSE)
      out
      #$res
      #[1] 3 2 1
      #
      #$unconnected
      #[1] 0
      

      所以out$res 给出了 3 条长度==1 的路径、2 条长度==2 和 1 条长度==3 的路径,这本质上是直方图/条形图数据。如有必要,您可以扩展以获得表示分布的向量,例如:

      rep(seq_along(out$res),out$res)
      #[1] 1 1 1 2 2 3
      

      签出:

      mean(rep(seq_along(out$res),out$res))
      #[1] 1.666667
      average.path.length(g)
      #[1] 1.666667
      

      2) - 可能是这样的:

      g <- graph.data.frame(data.frame(a=c(1:3,2),b=c(2:4,5)),directed=FALSE)
      # node 2 has a higher degree than its neighbours
      sapply(
        neighborhood(g,order=1),
        function(x) {degs <- degree(g,x); all(degs[1] > degs[-1]);} 
      )
      #[1] FALSE  TRUE FALSE FALSE FALSE
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-15
        • 2018-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多