У меня есть матрица смежности, и я хочу использовать язык DiagrammeR Graphviz
для ее описания.
Ниже - моя матрица смежности MM
MM<-matrix(c(1,1,0,0,0,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,1,1), 5, byrow=T)
colnames(MM)<-c("A", "B", "C", "D", "E")
row.names(MM)=colnames(MM)
MM
A B C D E
A 1 1 0 0 0
B 1 1 1 1 0
C 0 1 1 1 0
D 0 1 0 1 1
E 0 0 0 1 1
Получение информации на сайте DiagrammeR figuremeR Docs и я могу создать орграф, используя следующий код:
grViz("
digraph boxes_and_circles {
# a 'graph' statement
graph [overlap = true, fontsize = 10]
node [shape = circle,
fixedsize = true,
width = 0.9] // sets as circles
A; B; C; D; E
# several 'edge' statements
A->A A->B B->A B->B B->C B->D C->B C->C C->D D->B D->D D->E E->D E->E
}")
Это прекрасно работает для создания орграфа из MM
, но, как вы можете видеть, описание всех узлов и взаимодействия всех узлов для большего кода станет слишком громоздким, и идея состоит в том, чтобы упростить его.
Итак, моя идея состояла в том, чтобы использовать вектор, чтобы указать как узлы, так и взаимодействие узлов, но здесь я терплю неудачу. Я попытался с помощью igraph
преобразовать матрицу смежности MM
в формат графика и оттуда извлечь взаимодействие узлов и попытаться присвоить эту информацию предыдущему коду. Ниже приведен код, который я использовал для этого:
graphMM <- graph_from_adjacency_matrix(MM, mode = c("directed"),
weighted = NULL, diag = TRUE, add.colnames = NULL, add.rownames = NA)
edgesMp<-as_edgelist(graphMM)
n_int<-c(0)
for(i in 1:nrow(edgesMM)){
n_int[i]<-paste(edgesMM[i,1], edgesMM[i,2], sep = "->")}
n_int
[1] "A->A" "A->B" "B->A" "B->B" "B->C" "B->D" "C->B" "C->C" "C->D" "D->B"
[11] "D->D" "D->E" "E->D" "E->E"
Я попытался присвоить вектор n_int
коду grViz
как:
# несколько «крайних» утверждений
n_int
Но при этом печатается только слово n_int
плюс указанные узлы, каждый внутри круга, без фактического использования информации n_int
для построения связей между узлами.
Мне известно, что на DiagrammeR
сайте показана другая форма для создания орграфов ( graph_creation ), которая позволяет указывать информацию с использованием векторов, но эта версия не позволяет для построения подграфа для ориентации узла (например, уровни графа, соответствующие трофическим уровням в экологии), которые мне понадобятся.
Итак, мой вопрос: кто-нибудь знает, как назначить имена узлов и их соединения к коду grViz, используя векторы?