我有一个名字矢量和一张距离表
节点:
>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模型。
运行此commad之后:
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。 有没有人有想法?
由于 阿萨
答案 0 :(得分: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的元素相关?所以我无法提供特定于您的数据的答案,但使用索引而不是节点名称解决了我的问题。
编辑:
我遇到了您描述的确切问题,并找到了提供有用建议的link。首先创建有向图,然后使用ugraph函数检索由有向图表示的“基础”无向图。
答案 1 :(得分:1)
我自己挣扎了一段时间。 documentation不是很清楚。最后,我在Rgraphviz package的文档中找到了答案。
您可以在不指定边缘的情况下初始化图形:
gR = new("graphNEL", nodes = V, edgemode = "directed")
然后你可以使用:
逐个添加边gR = addEdge("SERPINA3", "ABAT18", gR, 5987)
我确定这不是 的方法,但我的图表边缘很少,所以我不再寻找更好的选择。
答案 2 :(得分:1)
您需要定义一个捕获所有边的矩阵。 举个例子:
From <- c("A","A","C","C")
To <- c("B","C","B","D")
L <- cbind(From,To)
mygraphNEL <- ftM2adjM(L, edgemode="directed")
更多详情here。