从数据创建graphNEL对象

从数据创建graphNEL对象,r,graph,R,Graph,我有一个名字向量和一个距离表 节点: >V SERPINA3 ABAT18 ABL1 ACADM 边缘: >distances SERPINA3 1 179 713 627 1937 5984 747 1450 681 718 749 1124 1839 1617 1639 2017 3619 5985 5986

我有一个名字向量和一个距离表

节点:

>V
SERPINA3
ABAT18
ABL1
ACADM
边缘:

>distances
SERPINA3    1   179 713 627 1937    5984    747 1450    681 718 749 1124    1839    1617    1639    2017    3619    5985    5986                                                   
ABL1    3   175 12  77  81  179 144 174 208 213 223 270 274 282 305 331 348 459 532 517 785 710 889 5988    972 1120    1064    1592    1322    1324    1331    1373    1526    1566    1717    1718    1802    1847    1947
ABAT18  2 5987                                               
ACADM   4   5998
从这两个文件中,我想使用以下命令创建graphNEL对象:

gR <- new("graphNEL", nodes=V, edgeL=edL1)

gR我在尝试创建graphNEL对象时遇到了类似的错误。我的问题是边列表的元素应该是节点的索引-因此edgeL的示例可能如下所示

$SERPINA3
$SERPINA3$edges
[1] 1, 2, 4
与最初的预期相比(以下是不正确的):

我不太明白edgeL元素是如何映射到您在V中创建的节点上的(即,数字1、2、3、4或179、175、5987、5998与V元素的关系如何?),因此我无法提供特定于您的数据的答案,但使用索引而不是节点名称解决了我的问题

编辑:


我遇到了你描述的问题,找到了一个能提供有用建议的方法。首先创建一个有向图,然后使用ugraph函数检索由有向图表示的“底层”无向图。

我自己也为此挣扎了一会儿。答案不是很清楚。最后,我在文件中找到了答案

可以在不指定边的情况下初始化图形:

gR = new("graphNEL", nodes = V, edgemode = "directed")
然后,可以使用以下方法逐个添加边:

gR = addEdge("SERPINA3", "ABAT18", gR, 5987)

我确信这不是解决问题的办法,但我的图形几乎没有边,因此我停止了寻找更好的替代方法。

您需要定义一个矩阵,以捕获所有边。 例如:

From <- c("A","A","C","C")

To <- c("B","C","B","D")

L <- cbind(From,To)

mygraphNEL <- ftM2adjM(L, edgemode="directed")

这样做是可行的,但这是一个非常缓慢的解决方案。如果您实际上提前定义了一个边列表,则速度要快得多…列表中的每个节点都是一个列表,其中列表中的
$edges
是节点索引的向量,而不是节点的名称,
$weight
是具有相同长度和权重的向量(我认为您得到的是正确的)。
gR = addEdge("SERPINA3", "ABAT18", gR, 5987)
From <- c("A","A","C","C")

To <- c("B","C","B","D")

L <- cbind(From,To)

mygraphNEL <- ftM2adjM(L, edgemode="directed")