Это первый раз, когда я работаю с графиками и R
igraph
пакетом, и мне нужна помощь в обработке объектов графа.R igraph: кратчайшее извлечение пути
То, что я хочу добиться:
Из данной контактной матрицы экстракте кратчайшее уверенно пути между узлами. Я уверен, что вес кромки выше соседних краев.
Примеры:
m <- read.table(row.names = 1, header = TRUE, text =
" A B C D E F
A 0 1 1 1 1 5
B 1 0 1 1e2 1e2 1
C 1 1 0 1 1 1
D 1 1e2 1 0 1e2 1
E 1 1e2 1 1e2 0 1
F 5 1 1 1 1 0")
m <- as.matrix(m)
ig <- graph.adjacency(m, mode = "undirected", weighted = TRUE, diag = FALSE)
sp <- shortest.paths(ig, algorithm = "dijkstra")
В матрице m
есть один кластер (клика?) Между B-D-E
(т.е. EGDE вес между этими узлами является высоким.). Однако, поскольку есть вес между A
и F
, я также получаю кластер, хотя вес края низкий (всего 5).
Вопрос: Как извлечь только те кластеры, которые имеют большой вес кромки? Я могу преобразовать эти контакты в 0 с m[which(m <= 5)] <- 0
, но я надеюсь, что для этого в пакете igraph
есть более «мати».
Б
m <- read.table(row.names = 1, header = TRUE, text =
" A B C D E F
A 0 1 1 5 1 1
B 1 0 1 1e2 1e2 1
C 1 1 0 1 1 1
D 5 1e2 1 0 1e2 1
E 1 1e2 1 1e2 0 1
F 1 1 1 1 1 0")
m <- as.matrix(m)
ig <- graph.adjacency(m, mode = "undirected", weighted = TRUE, diag = FALSE)
sp <- shortest.paths(ig, algorithm = "dijkstra")
В матрице m
есть кластер между B-D-E
, но так как есть низкий вес между A
и B
- A
также подключен к этой группе.
Вопрос B: Как не назначать узлы кластеру, если вес края низкий?
Это мой первый вопрос здесь, если вам нужны разъяснения или лучшие примеры, я улучшу свои вопросы.
Спасибо! У меня было некоторое недоразумение с графиками/'igraph'. Теперь я знаю, что искал сообщества в своих матрицах и 'cluster _ [...]' или 'community. [...]' дал мои права для моей задачи. – user54101