【问题标题】:choose neighborhood that have specific edge weights in igraph R在 igraph R 中选择具有特定边权重的邻域
【发布时间】:2013-12-04 11:59:46
【问题描述】:

我有一个权重为 1 和 2 的加权无向网络。我需要选择距离最多 5 步的所有顶点的邻居。然而,这 5 个步骤应包括 2 个权重 = 2 的边。例如,如果所有 5 条边的权重为 1,则应排除这些邻居。 问题:如何选择与特定边权重相连的邻居?

代码:

matrix= matrix(as.integer(runif(100,0,3)), 10, 10)
matrix
ntwrk=graph.adjacency(matrix,weighted=TRUE, mode="undirected")
neighborhood(ntwrk,5)

现在,我需要找出其中哪一个包含 weight=2 的边。然后,我只需要保留那些邻居,并用neighborhood.size 测量邻域大小

【问题讨论】:

    标签: r igraph


    【解决方案1】:

    neighborhood 的结果是边列表的列表。您可以使用lapply 并使用属性权重过滤每个列表。

    res.tokeep <- lapply(res, function(x) which(E(ntwrk)[x]$weight==2))
    

    这是一个完整的例子,我在权重过滤器之前和之后绘制图表。

    library(igraph)
    set.seed(1)
    mat = matrix(as.integer(runif(10*10,0,3)), 10, 10)
    
    ntwrk=graph.adjacency(mat,weighted=TRUE, mode="undirected")
    res <- neighborhood(ntwrk,5)
    op <- par(mfrow=c(1,2))
    E(ntwrk)$label <- E(ntwrk)$weight
    plot(ntwrk)
    res.tokeep <- lapply(res, function(x) which(E(ntwrk)[x]$weight==2))
    res.todelete <- lapply(res, function(x) which(E(ntwrk)[x]$weight!=2))
    
    ntwrk <- delete.vertices(ntwrk, unique(unlist(res.todelete)))
    plot(ntwrk)
    
    par(mfrow=op)
    

    【讨论】:

    • 好的,但据我了解,邻域的结果是顶点列表,而不是边。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多