Как назначить сетевую информацию DiagrammeR grViz, используя вектор - PullRequest
0 голосов
/ 03 июля 2018

У меня есть матрица смежности, и я хочу использовать язык 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, используя векторы?

...