Предотвратить R igraph от добавления нулевой вершины - PullRequest
2 голосов
/ 03 сентября 2011

Я создаю график, используя следующий код:

g <- graph(c(1,1, 1,4, 2,1, 2,2, 3,1, 3,4, 5,1, 5,2))

Я хотел бы знать, как я могу создать этот график, и мне не нужно выполнять дополнительный шаг:

delete.vertices(g, 0)

Кажется, что функция графа по умолчанию обнуляет индексированные вершины, поэтому в графе существует вершина 0, которая не связана ни с какими другими вершинами. Я могу проверить это, используя V (g), или просто резюме (g), которое показывает 6 вершин с идентификаторами от 0 до 5.

1 Ответ

4 голосов
/ 03 сентября 2011

Документация, к которой я обращаюсь с сайта r-forge, гласит: «Вершины и ребра имеют числовые идентификаторы вершин в igraph. Идентификаторы вершин всегда последовательны и начинаются с нуля».Поэтому вам нужно вычесть 1 из этого вектора перед отправкой в ​​функцию графа.В противном случае вы получите несвязанную вершину «0».Общий способ избежать несвязанной вершины «0» состоит в том, чтобы вычесть минимум из вектора.

> g <- graph( c(1,1, 1,4, 2,1, 2,2, 3,1, 3,4, 5,1, 5,2) -1)
> g
Vertices: 5 
Edges: 8 
Directed: TRUE 
Edges:

[0] 0 -> 0
[1] 0 -> 3
[2] 1 -> 0
[3] 1 -> 1
[4] 2 -> 0
[5] 2 -> 3
[6] 4 -> 0
[7] 4 -> 1
> g2 <- graph( c(1,1, 1,4, 2,1, 2,2, 3,1, 3,4, 5,1, 5,2) )
> g2 <- delete.vertices(g2, 0)
> g2
Vertices: 5 
Edges: 8 
Directed: TRUE 
Edges:

[0] 0 -> 0
[1] 0 -> 3
[2] 1 -> 0
[3] 1 -> 1
[4] 2 -> 0
[5] 2 -> 3
[6] 4 -> 0
[7] 4 -> 1
> all.equal(g,g2)
[1] TRUE

Так что я подозреваю, что ваш вопрос действительно может быть «Как я могу маркировать вершины, используя мои собственные правила?»,Попробуйте это:

g <- graph( c(1,1, 1,4, 2,1, 2,2, 3,1, 3,4, 5,1, 5,2) -1)
plot(g, vertex.label=1:5)

В первом разделе документов также написано:

Домашняя страница igraph на http://igraph.sourceforge.net. См. Особенно раздел документации.Присоединяйтесь к списку рассылки igraph-help, если у вас есть вопросы или комментарии.

...