Удалить выбранные короткие пути из графика в igraph - PullRequest
0 голосов
/ 14 ноября 2018

Уважаемые участники сообщества:

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

library(igraph)
    g <- graph.adjacency(
  as.matrix(as.dist(cor(t(POS_testing), method="pearson"))),
  mode="undirected",
  weighted=TRUE,
  diag=FALSE
)
g <- simplify(g, remove.multiple=TRUE, remove.loops=TRUE)
g <- delete_edges(g, E(g)[which(E(g)$weight<0.9)])

Глядя на мои вершины:

V(g)$comp <- components(g)$membership
V(g)$comp
[1]  1  2  3  4  3  5  6  7  3  8  9 10 11 12 13 14 15 16  3  3  3 17 18 19 20 15  3 21  3
[30]  3  3  3 22 23  3  3  3  3 24 25  3 26 27 28  3 29  3  3  3 30 31  3  3  3  3  3  3 32
[59]  3 33  3  3 34 35  3  3 28 28 36 37 38  3 39 28  3  3  3  3 40 21 21  3 41  3  3 42  3
[88]  3  3  3  3  3 43 44  3 45  3 46  3 47 48  3  3  3  3  3  3 49  3  3  3  3 50  3  3  3
[117]  3 51  3  3 52 53 52 52 54 55 52  3 56 57 58 55 59  3 60 61  3 62  3 63 64 65 66 67  3
[146]  3  3  3 68  3 69 64 70 71  3 72  3 73 74  3  3 75  3  3  3  3 32 76  3 77  3 78  3  3
[175] 79 80  3 81 82  3  3 73  3  3  3 83 84 85 73  3  3  3  3  3 86 32 87

Теперь запускаю команду, которую я нашел здесь: Удаляем неподключенные короткие пути из графикав igraph я могу получить вершины, которым присвоен номер «3».

g <- induced_subgraph(g, V(g)$comp == 3)
V(g)$comp
[1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[45] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[89] 3 3 3 3 3 3 3 3

Однако я хотел бы выбрать больше, чем просто вершины, назначенные 3. Я хотел бы выбрать отображение 3, 21, 28, 32, 52 и 73.

Я столкнулся с этим сайтом: http://igraph.org/r/doc/delete_vertices.html Итак, я запустил код:

t <- delete_vertices(g, comps$Var1) 

Где comps $ Var1 - числовой вектор всех чисел (показанных выше), которые я хочу удалить (т.е. 1, 2, 4, 5 и т. д.).Это не работает.У меня все еще есть 197 номеров, когда я запускаю V(t)$comp.

Затем я попытался заполнить его вручную и запустил следующий код (3 происходит 96 раз, 21 происходит 3 раза и т. Д.):

V(g)$comp <- c(rep(3, 96), rep(21, 3), rep(28, 4), rep(32, 3), rep(52, 4), rep(73, 3)). 

Это тоже не сработало.

Затем я попытался вместо этого добавить add_edges (только они, чтобы посмотреть, сработает ли это):

t <- add_edges(g, c(which(V(g)$comp == 3), which(V(g)$comp == 21), which(V(g)$comp == 28)))

Это все равно привело к получению всех чисел, приведенных выше, и выборочно не выбрало эти числа для графика.

Я также пытался использовать оператор & следующим образом:

g <- induced_subgraph(g, c(V(g)$comp == 3 & V(g)$comp == 21 & V(g)$comp ==29))

Это также сохранило все мои вершины.

У меня нет идей, и я спрашиваю это сообщество, возможно ли это вообще.Большое спасибо за Вашу помощь.

1 Ответ

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

Нам нужно POS_testing, чтобы воспроизвести ваш пример, но попробуйте:

g <- induced_subgraph(g, V(g)$comp %in% c(3, 21, 28, 32, 52, 73))

...