R & Gephi ( R & Gephi ):границы в сети импортируются неправильно с помощью пакета rgexf
-
21-12-2019 - |
Вопрос
У меня проблема с пакетом R "rgexf"
.В частности, у меня есть проблема с края сети, которую я импортирую в Gephi.В R я могу создать базу данных вершин
>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")
где path_gexf
это просто путь к выходному файлу (который называется example.gexf).
Я открываю example.gexf с помощью Gephi (бета-версия 0.8.2).На изображении 1:
вы можете просмотреть отчет об импорте в Gephi:количество вершин и ребер указано правильно;Я вручную меняю тип графика на неориентированный и импортирую все данные в окно Лаборатории данных.
- Вопрос 1. Почему я должен указывать "неориентированный" в окне отчета об импорте, если я уже сделал это в функции write.gexf?
На изображении2
вы можете видеть, что после импорта тип графика автоматически переключается на "направленный" и на самом деле ни одно ребро не импортируется.
На изображении 3
у нас есть список вершин:все в порядке.Метки и идентификаторы импортированы правильно.На изображении 4
вы можете увидеть окно Лаборатории данных для определения ребер:кромка не импортируется, как уже отмечалось на рисунке 2.Я действительно не понимаю, почему не импортируется edge.
- Вопрос 2.Как исправить импорт файла example.gexf?На уровне R-кода все гладко, и вершины / ребра корректно генерируются моим кодом.Проблемы возникают с Gephi.
Замечания:У меня есть много файлов .gexf с проблемами, связанными с импортом ребер;во многих случаях импортируется только несколько ребер с неправильными "Source" и "Target".Как ни странно, параллельные ребра всегда правильно подсчитываются в соответствии с их кратностью.
Прошу прощения за длинный пост.
Редактировать:некоторые тесты с фиктивным 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 является правильным без ошибок.идентификаторы узлов и ребер, метки, источники и целевые объекты.
В чем заключаются проблемы?В случае с 3 ребрами отчет об импорте в Gephi корректен, в то время как в окне data laboratory edge ребро не отображается
<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, а не в моем коде.
Есть какие-нибудь предложения / комментарии?
Решение
Вопрос 1:Несмотря на то, что вы уже указали график как неориентированный в файле gexf, directed используется по умолчанию, хотя нажатие на него немного раздражает, по крайней мере, это не так уж и важно.С точки зрения безопасности проще позволить пользователю дважды проверить, какой тип графика он импортирует, чем потенциально сделать неправильный выбор.Это занимает 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?Просто догадываюсь, потому что я не смог повторить вашу ошибку.