Следует иметь в виду, что большинство функций igraph ссылаются на вершины по их идентификаторам, которые являются просто целыми числами от 0 до N-1, где N - это число вершин в графе. Если у вас есть таблица целых чисел N x 2 (содержащая нулевые индексы вершин) и вы хотите, чтобы igraph использовал целые числа в качестве идентификаторов вершин, вы можете просто использовать конструктор graph
после того, как матрица сглажена в вектор по строкам , Когда вы используете graph.data.frame
, предполагается, что первые два столбца фрейма данных содержат символическую вершину names (т.е. не требуется, чтобы они были целыми числами); они будут назначены атрибуту вершины name
, и igraph просто составит идентификаторы от 0 до N-1.
Итак, давайте предположим, что у вас есть матрица N x 2, по одной строке на каждое ребро:
> edges <- matrix(c(103, 86, 24, 103, 103, 2, 92, 103, 87, 103, 103, 101, 103, 44), ncol=2, byrow=T)
Сначала мы создадим из него график после выравнивания матрицы по строкам:
> g <- graph(as.vector(t(edges)))
Это дает вам ориентированный граф с 7 ребрами, и выход / в градусах вершины 103 будет таким, как ожидалось:
> ecount(g)
7
> degree(g, 103, mode="out")
4
> degree(g, 103, mode="in")
3
> degree(g, 103, mode="all")
7
Если вы используете graph.data.frame
с вышеуказанной матрицей, igraph создаст график, где числа в матрице хранятся в атрибуте вершины name
:
> g <- graph.data.frame(as.data.frame(edges))
> V(g)$name
[1] "103" "24" "92" "87" "86" "2" "101" "44"
Это показывает, что вершина с именем 103
фактически стала нулевой вершиной на графике:
> degree(g, 0, mode="out")
4
> degree(g, 0, mode="in")
3
> degree(g, 0, mode="all")
7
Насколько я знаю, degree
также может работать с именами вершин напрямую, если в графе есть атрибут вершины с именем name
, так что вы также можете сделать это:
> degree(g, "103", mode="in")
3
Надеюсь, это поможет.