Связи 2-й степени в игре - PullRequest
       27

Связи 2-й степени в игре

4 голосов
/ 04 ноября 2011

Я думаю, что это работает правильно, но я собираюсь имитировать что-то похожее на предложение друзей Facebook. Я просто ищу связи 2-й степени (друзей ваших друзей, с которыми у вас нет связи). Я хочу сохранить это в виде ориентированного графа и определить внешние связи 2-й степени (людей, к которым подключаются ваши друзья).

Я полагаю, что мой фиктивный код достигает этого, но поскольку ссылка на индексы, а не на метки вершин, я надеялся, что вы поможете мне изменить код, чтобы он возвращал используемые имена.

### create some fake data
library(igraph)

from <- sample(LETTERS, 50, replace=T)
to <- sample(LETTERS, 50, replace=T)
rel <- data.frame(from, to)
head(rel)    

### lets plot the data
g <- graph.data.frame(rel)
summary(g)
plot(g, vertex.label=LETTERS, edge.arrow.size=.1)


## find the 2nd degree connections
d1 <- unlist(neighborhood(g, 1, nodes="F", mode="out"))
d2 <- unlist(neighborhood(g, 2, nodes="F", mode="out"))
d1;d2;
setdiff(d2,d1)

Возвращает

> setdiff(d2,d1)
[1] 13

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

Ответы [ 2 ]

4 голосов
/ 04 ноября 2011

Вы можете проиндексировать вершины графа как:

> V(g)[setdiff(d2,d1)]
Vertex sequence:
[1] "B" "W" "G"

Также ознакомьтесь с ?V, чтобы узнать, как получить информацию такого типа с помощью прямой индексации.

3 голосов
/ 04 ноября 2011

Вы можете использовать матрицу смежности $ G $ графа $ g $ (здесь нет латекса?).Одним из свойств матрицы смежности является то, что ее n-я степень дает вам число $ n $ -переходов (путей длины n).

G <- get.adjacency(g)

G2 <- G %*% G        # G2 contains 2-walks
diag(G2) <- 0        # take out loops
G2[G2!=0] <- 1 # normalize G2, not interested in multiplicity of walks

g2 <- graph.adjacency(G2)

Край на графике g2 представляет связь "друг друга".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...