微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在R中将一个图的边添加到另一图两个图的顶点相同?

如何解决如何在R中将一个图的边添加到另一图两个图的顶点相同?

我正在努力了解如何将两个图与igraph合并在一起。

似乎可以将一个图形的顶点添加到另一个图形(由于add_vertices()函数),但是不可能将一个图形的边缘添加到另一个图形(尽管add_edges()函数

这是重现我的问题的代码,以及我得到的最终错误消息。

我首先创建两个图,每个图都有特定的顶点和边。

library(dplyr)
library(igraph)

d1 <- data.frame(from = c(1,1,2,3,4,6),to = c(5,6,5))
graph1 <- graph_from_data_frame(d1,directed = FALSE,vertices = NULL)
V(graph1)
E(graph1)

d2 <- data.frame(from = c(7,7,8,9,10,12),to = c(11,11,11))
graph2 <- graph_from_data_frame(d2,vertices = NULL)
V(graph2)
V(graph2)$Size <- c(56,58,75,81,65,45)
vertex.attributes(graph2)
E(graph2)

现在,我想获得一个包含前两个图的顶点和边的图。

对顶点工作正常:

graph3 <- add_vertices(graph1,length(V(graph2)),attr = vertex.attributes(graph2))
V(graph3)
vertex.attributes(graph3)

但是不管我尝试什么,我都会失败:

# 1st try
graph3 <- add_edges(graph1,E(graph2))

# 2nd try
E(graph3) <- add_edges(graph1,E(graph2))

# 3rd try (very cumbersome)
edges2 <- get.edgelist(graph2)
edges2 <- data.frame(source = edges2[,1],target = edges2[,2])

edges2for3 <- NULL
for (i in 1:length(edges2$source)) {
  edges2for3 <- append(edges2for3,as.numeric(edges2[i,]))
}

# edges2for3 is indeed a vector,which seems to me very close to the "vertex sequence" referred to in ?add_edges
edges2for3

add_edges(graph1,edges2for3)

我总是出现以下消息错误,我不理解:

Error in add_edges(graph1,E(graph2)) : 
  At type_indexededgelist.c:272 : cannot add edges,Invalid vertex id

为什么顶点ID无效?所有边都来自现有顶点...

欢迎任何帮助:-)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。