我正在尝试使用包igraph
挖掘R中的3节点图案。我想检索图中每个顶点的图案数量,这从graph.motifs()函数中看不出来。
因此,对于示例图:
testGraph = barabasi.game(10,
m = 5,
power = 2,
out.pref = TRUE,
zero.appeal = 0.5,
directed = TRUE)
我可以使用graph.motifs()
来计算整个图表中每个3节点图案的总数:
graph.motifs(testGraph,
size = 3)
[1] 0 0 26 0 16 0 2 58 0 0 0 0 0 0 0 0
但我想知道个别顶点参与。那么,顶点1参与了多少个图案(以及什么类型)?有人知道一个简单的方法吗?
答案 0 :(得分:7)
这是一个快速的操作方法。
你对顶点 A 的三元组感兴趣,然后首先创建包含 A 及其直接邻居的诱导子图。您可以通过neighborhood()
和induced.subgraph()
或仅使用graph.neighborhood()
执行此操作。
然后在这个子图中找到主题,但不是graph.motifs()
,而是triad.census()
,因为它会计算所有可能的三元组,甚至是非连接的三元组。
然后从此子图中删除 A ,然后再次调用triad.census()
。两个计数向量的差异将是包含 A 的主题。
答案 1 :(得分:6)
以下是Gabor解决方案的一个独立示例:
testGraph = barabasi.game(10,
m = 5,
power = 0.6,
out.pref = TRUE,
zero.appeal = 0.5,
directed = TRUE)
# Label nodes to more easily keep track during subsets/deletions
V(testGraph)$name = c('one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten')
subGraph = graph.neighborhood(testGraph, order = 1, V(testGraph)[1], mode = 'all')[[1]]
allMotifs = triad.census(subGraph)
removeNode = delete.vertices(subGraph, 'one')
node1Motifs = allMotifs - triad.census(removeNode)