Преобразовать список последовательностей вершин в таблицу в R - PullRequest
0 голосов
/ 12 ноября 2018

Я использую функцию adjacent_vertices() из пакета igraph. Возвращает список последовательностей вершин.

library(igraph)
g <- make_graph("Zachary")
mylist <- adjacent_vertices(g, c(1,2), mode="out")

#    [[1]]
    + 16/34 vertices, from 5feb73a:
     [1]  2  3  4  5  6  7  8  9 11 12 13 14 18 20 22 32

#    [[2]]
    + 9/34 vertices, from 5feb73a:
    [1]  1  3  4  8 14 18 20 22 31

Мне нужно найти краткую презентацию результата, например:

V Count
[1] 16
[2] 9

Здесь V - это имя вершины, а Count - это степень отсутствия.

Я пытался использовать:

degree(g)[1]
    # 16
degree(g)[2]     
    # 9

Вопрос. Возможно ли преобразовать список списка в таблицу или существует встроенная функция в пакете igraph?

Редактировать. Количество вершин в исходном графе больше 100.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Суть в том, что у вас есть неисследованный график (вы можете увидеть это, используя V(g)$name, который возвращает NULL). В этом случае вы можете использовать вершины id вместо name.

Чтобы получить вершины id, вы должны использовать V(g). Вы можете преобразовать этот igraph.vs объект как вектор, используя as.vector(V(g)). Это даст вектор, содержащий все вершины id.

Затем вы можете объединить as.vector(V(g)) и функцию degree(), чтобы получить таблицу (data.frame), используя:

data.frame(V = as.vector(V(g)),
           Count = degree(g, v = V(g), mode = "out"))
# outupt
    V Count
1   1    16
2   2     9
3   3    10
4   4     6
5   5     3
6   6     4
7   7     4
8   8     4
9   9     5
10 10     2
11 11     3
12 12     1
13 13     2
14 14     5
15 15     2
16 16     2
17 17     2
18 18     2
19 19     2
20 20     3
21 21     2
22 22     2
23 23     2
24 24     5
25 25     3
26 26     3
27 27     2
28 28     4
29 29     3
30 30     4
31 31     4
32 32     6
33 33    12
34 34    17
0 голосов
/ 12 ноября 2018

Это было бы полезно для вас.Сначала получите список вершин смежных вершин.

vlist=V(g)$name
vercount=adjacent_vertices(g, vlist, mode="out")

Теперь создайте два вектора для имен и степени вершины.

vertexname=vector(`)
vertexcount=vector()

Затем найдите количество смежных вершин.

for(i in 1:length(vlist))
{
  vertexname[i]=vlist[i]
  vertexcount[i]=length(vercount[[i]])
}
df=data.frame(vertexname,vertexcount)
df

Это даст вамполный список вершин и их степень.

...