问题已开始here。
我有一个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))
我需要为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
的顶点的邻域?
答案 0 :(得分:1)
该函数是正确的,但是第二个参数与感兴趣的顶点无关,它是第三个参数:
neighborhood
# function (graph, order = 1, nodes = V(graph), mode = c("all",
# "out", "in"), mindist = 0)
# {
# ...
因此
length(neighborhood(g, nodes = idv))
# [1] 7
完成工作。