Проблемы с соседней функцией пакета R "igraph"
Я недавно начал использовать пакет R "igraph" (версия 0.7). Я написал простую программу, чтобы понять основы пакета (чтение данных в графическом объекте, получение соседей узла). Я использую граф, вершины которого начинаются с 0. Ребра в графе заполняются так, как мне нужно, однако, когда я пытаюсь получить список соседей / соседей узла, я заметил, что это не дает ожидаемого результата. Может ли кто-нибудь помочь мне с этим / или указать, если я что-то упускаю тривиально?
Ниже приведен график данных / код, который я написал:
Данные грани графа (первый столбец содержит первую вершину, второй столбец содержит вершину, в которой есть ребро от первой вершины)
0 5
1 5
2 5
3 5
0 2
> library('igraph')
> graph_file_ori = read.table("test.txt")
> graph_obj = graph.data.frame(graph_file_ori,directed=FALSE)
> str(graph_obj)
IGRAPH UN-- 5 5 --
+ attr: name (v/c)
+ edges (vertex names):
[1] 0--5 1--5 2--5 3--5 0--2
> neighbors(graph_obj,0)
Error in .Call("R_igraph_neighbors", graph, as.igraph.vs(graph, v) - 1, :
At type_indexededgelist.c:750 : cannot get neighbors, Invalid vertex id
> neighbors(graph_obj,1)
[1] 3 5
> neighbors(graph_obj,2)
[1] 5
> neighbors(graph_obj,3)
[1] 1 5
> neighbors(graph_obj,4)
[1] 5
> neighbors(graph_obj,5)
[1] 1 2 3 4
Исходя из графика, ожидаемый результат был:
neighbors(0) = 5,2
neighbors(1) = 5
neighbors(2) = 5,0
neighbors(3) = 5
Степень 4 - 0. Цените помощь.
2 ответа
Если вы хотите использовать символические имена вершин, это нормально, но тогда вам нужно использовать их и в своих запросах. То есть пишешь
neighbors(graph_obj, "0")
Если вы хотите получить результаты в виде символических имен, то вам нужно сделать
graph_obj$name[neighbors(graph_obj, "0")]
Это не понадобится в версии 0.8 от igraph.
Ваш граф имеет: вершину 1: "0", вершину 2: "1", вершину 3: "2", вершину 4: "3", вершину 5: "5"
Вот как я думаю, что соседей () работает:
соседей (graph_obj, 1) <=> соседей (graph_obj, вершина 1) и возвращает вершину 3, вершину 5 <=> "2", "5"
соседей (graph_obj, 2) <=> соседей (graph_obj, вершина 2) и возвращает вершину 5 <=> "5"
соседей (graph_obj, 3) <=> соседей (graph_obj, вершина 3) и возвращает вершину 1, вершину 5 <=> "0", "5"
...