从数据创建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")