1

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

节点:

>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)

有没有人知道如何做到这一点。我不知何故无法将距离列表放入列表列表中以适合 edgL 模型。

运行此命令后:

edL1 <- vector("list", length=ncol(Dist1))
names(edL1) <- V
for(i in 1:ncol(Dist1))
 edL1[[i]] <- list(edges=Dist1[,i], weights=sqrt(i))
gR <- new("graphNEL", nodes=V, edgeL=edL1)

我不断收到此错误:

边缘中的 NA 元素。

该图是无向的,并且以下边没有往复:NA|SERPINA3、NA|ABAT18、NA|ABL1、NA|ACADM

validObject(.Object) 中的错误:无效类“graphNEL”对象:FALSE

但是数据中没有NA。有人有想法吗?

谢谢阿萨

4

3 回答 3

1

我在尝试制作 graphNEL 对象时遇到了类似的错误。我的问题是边列表的元素应该是节点的索引 - 所以一个示例 edgeL 可能看起来像

$SERPINA3
$SERPINA3$edges
[1] 1, 2, 4

与人们最初可能期望的相比(以下内容不正确):

$SERPINA3
$SERPINA3$edges
[1] 'SERPINA3', 'ABL1', 'ACADM' 

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

编辑:

我遇到了您描述的确切问题,并找到了一个提供有用建议的链接。首先创建一个有向图并使用 ugraph 函数来检索由您的有向图表示的“基础”无向图。

于 2013-02-12T20:38:19.730 回答
1

我自己为此挣扎了一段时间。文档不是很清楚。最后,我在Rgraphviz 包的文档中找到了答案。

您可以在不分配边的情况下初始化图形:

gR = new("graphNEL", nodes = V, edgemode = "directed")

然后,您可以使用以下方法一一添加边:

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

我确定这不是要走路,但我的图表边缘很少,所以我停止寻找更好的选择。

于 2013-08-22T11:27:47.267 回答
1

您需要定义一个捕获所有边的矩阵。举个例子:

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

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

L <- cbind(From,To)

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

更多细节在这里

于 2015-08-03T12:47:40.030 回答