2017-10-13 125 views
1

我知道我的全局图的程度,但现在我需要查找子图内节点的度数。所以,约翰在他的学校有4个朋友,但他班上有三个朋友。我该如何指导igraph在班上统计这三位朋友,但他的学校里没有其他人?使用r igraph计算子图的度数

我的全球图表

library(igraph) 
school <- read.table(text=" 
    A B C D E F G 
A 0 1 0 1 0 1 1 
B 1 0 1 1 0 1 0 
C 0 0 0 0 0 0 1 
D 1 1 0 0 1 0 0 
E 0 0 0 1 0 1 1 
F 0 1 0 0 1 0 1 
G 1 0 1 0 1 1 0", header=TRUE) 

mat <- as.matrix(school) 
g <- graph.adjacency(mat, mode="undirected", add.rownames = T) 

我的从属关系矩阵类P,Q,和R

x <- read.table(text=" 
        P Q R 
       A 1 1 0 
       B 0 0 1 
       C 0 0 0 
       D 1 0 1 
       E 1 1 0 
       F 0 1 0 
       G 1 1 1", header=TRUE) 

inc <- as.matrix(x) 
ginc <- graph.incidence(inc) 

我的子图用于P类

class_nodes <- names(which(inc[,"P"] == 1)) 
class_adj <- mat[class_nodes, class_nodes] 
class_graph <- graph.adjacency(class_adj, mode = "undirected") 

我需要计算子图“class_graph”中的节点程度,但只计算它们在子图中的关系,而不是全局图。

+0

所以用这个样本数据计算这些节点的程度,期望的输出是什么,我们可以测试可能的解决方案? – MrFlick

+0

期望的输出是子图“class_graph”中的节点程度,但只计算它们在子图中的关系,而不是全局图。我更新了这个问题来说明这一点。 – NBK

+0

您给定义的实际数值会更加清晰。 – MrFlick

回答

3

您可以在类P中找到所有节点(我们特别提取名称,以便我们可以在不同的图形对象中查找它们)。

V(ginc)[.nei("P")]$name 

然后你就可以用

subg <- induced.subgraph(g, V(ginc)[.nei("P")]$name) 

从主图只提取连接的子集,你可以用

degree(subg) 
# A D E G 
# 2 2 2 2 
+0

函数.nei给我一个错误。你知道这可能是为什么吗? – NBK

+0

你使用的是什么版本的igraph?这是用'igraph_1.1.2'测试的。我认为它在以前的版本中被称为别的东西。 – MrFlick

+0

我的igraph 1.0.1 的错误信息是: 错误的eval(表达式,ENVIR,enclos):找不到功能“.nei” – NBK