Как найти окрестность только для определенных вершин? - PullRequest
1 голос
/ 31 мая 2019

Вопрос был начат здесь .

У меня есть ненаправленный граф g с n<100 вершинами. График прост. Координаты всех вершин являются целыми числами (x_i, y_i), i=1, 2,..., n, множество ребер предопределено, это отрезки с длиной 1 единица. Степень вершин может быть 2, 3 или 4.

library(igraph)

g <- graph_from_literal(1-2-3-4-5-6-7-8-1, 8-9-4)
B <- t(matrix(c(0,0, 0,1, 0,2, -1,2, -2,2, -2,1, -2,0, -1,0, -1,1), nrow =2));

V(g)$id <- seq_len(vcount(g))

V(g)$x <- B[,1]; V(g)$y <- B[,2]

plot(g, layout=as.matrix(B))

enter image description here

Мне нужно установить новый атрибут для вершины атрибута corner.

Мы говорим, что вершина i является вершиной corner, если ее степень равна 2, и два падающих ребра не лежат на одной прямой. На графике выше вершины 1, 3, 5, 7 являются угловыми, а остальные вершины 2, 4, 6, 8, 9 не угловые.

Моя попытка

Я нашел список вершин, степень которых равна 2.

idv <- V(g)[strength(g)==2]; idv # 1 2 3 5 6 7 9

Затем был найден список окрестностей вершин для i -й вершины.

neigh<-neighborhood(g, idv); neigh

Ошибка здесь, потому что я вижу вершины окрестности для всех вершин, а не только для вершин, имеющих степень, равную 2. Например,

neigh[[4]]; neigh[[8]];   
#[1] 4 3 5 9
#[1] 8 1 7 9

Вопрос. Как использовать функцию neighborhood, чтобы найти окрестность для вершин только с степенью 2?

1 Ответ

1 голос
/ 31 мая 2019

Функция корректна, но второй аргумент не о интересующих вершинах, это третий:

neighborhood
# function (graph, order = 1, nodes = V(graph), mode = c("all", 
#     "out", "in"), mindist = 0) 
# {
# ...

Таким образом,

length(neighborhood(g, nodes = idv))
# [1] 7

выполняет свою работу.

...