如何使用IGRAPHE或tnet在R中创建二部网络

如何使用IGRAPHE或tnet在R中创建二部网络,r,igraph,sna,R,Igraph,Sna,我有一个用于双模网络的edgelist,类似于: person Event Amy football_game Sam picnic Bob art_show 我想在R中对此进行分析,但似乎我尝试的一切都失败了。将其转换为单模式网络会受到内存限制,我不知道如何在igraph或tnet中将其作为二分体进行分析 在igraph中,bipartite.projection提供使用创建的igraph对象上的所有FALSE net <- graph.edgelist(my

我有一个用于双模网络的edgelist,类似于:

person  Event
Amy     football_game
Sam     picnic
Bob     art_show
我想在R中对此进行分析,但似乎我尝试的一切都失败了。将其转换为单模式网络会受到内存限制,我不知道如何在igraph或tnet中将其作为二分体进行分析

在igraph中,
bipartite.projection
提供使用创建的igraph对象上的所有
FALSE

net <- graph.edgelist(myobject)

在igraph中,二部网络是具有
类型
顶点属性的网络。此属性必须是逻辑属性,对于其中一种节点类型,必须为
TRUE
,对于其他节点类型,必须为
FALSE
。因此,要从边列表创建二部网络,只需创建一个规则图,然后添加
类型
顶点属性:

edgelist <- read.table(text="Person    Event
                         Amy       football
                         Bob       picnic
                         Sam       artshow", 
                   header=TRUE)
igraph <- graph.data.frame(edgelist)

V(igraph)$type <- V(igraph)$name %in% edgelist[,1]
igraph
# IGRAPH DN-B 6 3 -- 
# + attr: name (v/c), type (v/x)

这将返回两个图的列表。如果您认为投影可能太大,可以首先调用
bipartite.projection.size
函数,这将为您提供两个投影中的顶点和边的数量。IGRAPHE图形的内存需求为(4m+2n)*8+O(1)字节,其中“n”是顶点数,“m”是边数。

始终尝试发布一个。这会有很大帮助。我们不知道什么是
myobject
。而且,如果有人只是有一个教程或一个tnet的例子,这本身就可以帮助很多。@user1888451 Tore Opsahl(作者)在他的网站上浏览了一些例子@Gabor我试图投影一个加权二分图,但我得到了错误负向量,这使我的R会话崩溃……你以前有过这样的错误吗?@user1317221\u G:很可能你的图不是二分图,即你在相同类型的顶点之间有连接。@Gabor你能告诉我如何可视化该图吗。对于两种不同颜色的节点,根据顶点类型设置顶点颜色,例如,
V(g)$color“igraph图的内存需求为(4m+2n)*8+O(1)字节”,O(1)在这个等式中是什么意思?
edgelist <- read.table(text="Person    Event
                         Amy       football
                         Bob       picnic
                         Sam       artshow", 
                   header=TRUE)
igraph <- graph.data.frame(edgelist)

V(igraph)$type <- V(igraph)$name %in% edgelist[,1]
igraph
# IGRAPH DN-B 6 3 -- 
# + attr: name (v/c), type (v/x)
bipartite.projection(igraph)
# $proj1
# IGRAPH UN-B 3 0 -- 
# + attr: name (v/c), type (v/x)
#
# $proj2
# IGRAPH UN-B 3 0 -- 
# + attr: name (v/c), type (v/x)