【问题标题】:Issue with union function of igraphigraph的联合功能问题
【发布时间】:2021-11-01 19:06:01
【问题描述】:

我尝试在 2 个图上使用 union 函数,其中引入了同一图 G 的子图(因此它们之间没有冲突)。 我的问题是原始图(和子图)是加权的,另一方面,这些子图的并集不是。

这是我创建子图的代码(权重可以采用 {1, 2, 3, 4, 5} 中的值:

weights <- E(g)$weight
graphs <- list()
for (r in seq(5)) {
  graphs[[r]] <- delete.edges(g, E(g)[weights!=r])
}
 
reduced_graphs <- list()
x <- numeric(5)
y <- numeric(5)
for (r in seq(5)) {
  reduced_graphs[[r]] <- delete.vertices(graphs[[r]], V(graphs[[r]])[degree(graphs[[r]])<=-1])
  
  y[r] <- length(get_users(reduced_graphs[[r]]))
  
  reduced_graphs[[r]] <- induced_subgraph(reduced_graphs[[r]], c(sample(get_users(reduced_graphs[[r]]), y[r]^sqrt(4.3/10)), get_movies(reduced_graphs[[r]])))
    
  x[r] <- length(get_movies(reduced_graphs[[r]]))
  
  reduced_graphs[[r]] <- induced_subgraph(reduced_graphs[[r]], c(sample(get_movies(reduced_graphs[[r]]), x[r]^(4.3/10)), get_users(reduced_graphs[[r]])))
  
  reduced_graphs[[r]] <- delete.vertices(reduced_graphs[[r]],  V(reduced_graphs[[r]])[degree(reduced_graphs[[r]])==0])
}

这是给我带来问题的代码:

reduced_graph <- igraph::union(reduced_graphs[[1]], reduced_graphs[[2]])
is_weighted(reduced_graph)
[1] FALSE
is_weighted(reduced_graphs[[1]])
[1] TRUE
is_weighted(reduced_graphs[[2]])
[1] TRUE

结果图的顶点也失去了其他属性(如类型和颜色):

V(reduced_graph)$type
NULL
V(reduced_graph)$color
NULL

有人知道如何解决这个问题吗?谢谢!

操作系统:Windows 10 专业版 工作室 igraph 版本:1.2.6


Cross-posted on StackOverflow

【问题讨论】:

    标签: r graph-theory igraph subgraph


    【解决方案1】:

    也许您可以尝试以下解决方法

    graph_from_data_frame(
      unique(
        do.call(
          rbind,
          lapply(reduced_graphs, get.data.frame)
        )
      )
    )
    

    【讨论】:

    • 谢谢您,我真的很喜欢您的想法,并且确实生成的图表保留了权重,但它并没有解决即使使用此解决方案也会丢失顶点属性的问题。 (如果我错了也请纠正我,但我认为唯一性是不必要的,因为子图没有共同的边缘)
    • @David 您可以使用dput() 共享您的数据吗?然后我会检查它。
    猜你喜欢
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2020-09-12
    相关资源
    最近更新 更多