2

我对 R 包有疑问"rgexf"。特别是,我导入到 Gephi 的网络边缘存在问题。在 RI 中可以产生一个顶点数据库

>vertices
   Id Label
1   1     1
2   2     2
3   3     3
4   4     4
5   5     5
6   6     6
7   7     7
8   8     8
9   9     9
10 10    10

和一个边缘数据库(准确地说是单个边缘)

>edges 
      Source Target
    1      5      9

我使用创建一个 .gexf 文件

  >write.gexf(output = path_gexf, nodes = vertices, edges = edges,  defaultedgetype = "undirected")

wherepath_gexf只是输出文件的路径(称为 example.gexf)。
我使用 Gephi(版本 0.8.2 beta)打开 example.gexf。在图 1 中: 在此处输入图像描述

在Gephi中可以看到导入报告:顶点数和边数正确;我手动将图形类型更改为无向,并将所有数据导入数据实验室窗口。

  1. 问题 1如果我已经在 write.gexf 函数中指定了“未定向”,为什么还要在导入报告窗口中指定?

在图2

在此处输入图像描述

您可以看到,导入后,图形类型自动切换为“有向”,实际上没有导入任何边。

在图 3

在此处输入图像描述

我们有顶点列表:一切都很好。标签和 ID 已正确导入。在图 4

在此处输入图像描述

您可以看到边缘的数据实验室窗口:没有导入边缘,如图 2 中已经指出的那样。我真的不明白为什么没有导入边缘。

  1. 问题2、如何更正example.gexf文件的导入?在 R 代码级别,一切都很顺利,我的代码正确生成了顶点/边。Gephi 出现问题。

备注:我有很多 .gexf 文件存在边导入问题;在许多情况下,只有少数边被导入不正确的“源”和“目标”。奇怪的是,平行边总是根据它们的多重性正确计算。

我为长篇大论道歉。

编辑:一些使用虚拟 R 代码的测试

我使用@James Tobin 的代码做了一些测试(谢谢!)。它在我的电脑上也可以正常工作。我对带有 2 条边的图进行了测试:测试一切正常。然后我转移到 3,4 边缘案例,使用

require(rgexf)
vertices <- as.data.frame(cbind(seq(1,10),seq(1,10)))
colnames(vertices) <- c('Id','Label')
edges <- as.data.frame(cbind(c(5,1,2),c(1,1,3)))
colnames(edges) <- c('Source','Target')
write.gexf(nodes=vertices,edges=edges,
           defaultedgetype = "undirected")

require(rgexf)
vertices <- as.data.frame(cbind(seq(1,10),seq(1,10)))
colnames(vertices) <- c('Id','Label')
edges <- as.data.frame(cbind(c(5,1,4,2),c(2,3,1,2)))
colnames(edges) <- c('Source','Target')
write.gexf(nodes=vertices,edges=edges,
           defaultedgetype = "undirected")

在这两种情况下,XLM 代码在节点和边 ID、标签、源和目标方面都是正确的。

问题出在哪里?在 3 个边缘情况下,Gephi 中的导入报告是正确的,而数据实验室边缘窗口不显示边缘

<edge id="1" source="1" target="1" weight="1.0"/>

在 4 个边缘情况下,边缘

 <edge id="0" source="5" target="2" weight="1.0"/>

而是失踪了。

我开始相信 Gephi 0.8.2 中存在错误,而不是我的代码中。

有什么建议/意见吗?

4

1 回答 1

3

问题 1:尽管您已经在 gexf 文件中将图形指定为无向,但有向是默认设置,虽然单击它有点烦人,但至少没什么大不了的。从安全的角度来看,允许用户仔细检查他们正在导入的图表类型比潜在地错误选择更容易。这需要2秒,没什么大不了的。

问题2:我复制了你的例子

require(rgexf)
vertices <- as.data.frame(cbind(seq(1,10),seq(1,10)))
colnames(vertices) <- c('Id','Label')
edges <- as.data.frame(cbind(5,9))
colnames(edges) <- c('Source','Target')
write.gexf(output='testgex.gexf',nodes=vertices,edges=edges,
          defaultedgetype = "undirected")

但我对边缘没有任何问题。 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

也许您可以包含失败的确切代码?也许您的边缘不是 data.frame 形式?只是猜测,因为我无法复制您的错误。

于 2014-02-25T22:43:50.673 回答