Диаграмма R, использующая html для форматирования при чтении текста из переменной r - PullRequest
0 голосов
/ 13 января 2020

Я создаю блок-схему с помощью компоновщика пакетов R. Чтобы получить желаемое форматирование (жирный, маркированный, выравнивание по левому краю), я могу написать метку узла в html. Тем не менее, я также хочу заполнить часть текста, вызывая переменные в R, и я не могу понять, как сделать оба (html форматирование + вызов переменных R) одновременно.

В этот фрагмент кода, форматирование html работает, но вместо печати строки, присвоенной переменной 'text_var', он печатает строку 'text_var'.

library(DiagrammeR)

text_var = 'Some text'

grViz("digraph flowchart {
      # Node definitions
      node [fontname = Helvetica, shape = box]        
      tab1 [label = <<b> Node 1 </b> <br ALIGN = 'LEFT' /> &#8226; text_var  <br ALIGN = 'LEFT' /> 
                    >]
      tab2 [label = 'Node 2']

      # Edge definitions
      tab1 -> tab2 


      }")

enter image description here

В этом фрагменте кода я печатаю строку, присвоенную переменной 'text_var', но нет html.

library(DiagrammeR)

text_var = 'Some text'

grViz("digraph flowchart {
      # Node definitions
      node [fontname = Helvetica, shape = box]        
      tab1 [label = '@@1']
      tab2 [label = 'Node 2']

      # Edge definitions
      tab1 -> tab2 
}

      [1]: paste0('Node 1 \\n ', text_var)


      ")

enter image description here

Желаемый результат - текст из второго примера с форматированием из первого. Спасибо!

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Хотя решение Аллана Камерона работает, также возможно использовать Подстановка Graphviz .

Однако реализация показалась мне довольно ошибочной, хотя @@1 должно работать в следующем примере, я обнаружил, что потребовалось более 3 минут полной загрузки процессора, прежде чем я выключил его. @@1-1 вроде работает.

text_var = 'Some text'

grViz("
  digraph flowchart {
    # Node definitions
    node [fontname = Helvetica, shape = box]        
    tab1 [label = <
                   <b>Node 1</b>
                   <br ALIGN = 'LEFT' /> 
                     &#8226; @@1-1
                   <br ALIGN = 'LEFT' /> 
                  >]
    tab2 [label = 'Node 2']

    # Edge definitions
    tab1 -> tab2 
  }
  [1]: text_var"
)

enter image description here

1 голос
/ 13 января 2020

R не знает, что вы хотите, чтобы строка "text_var" внутри строки, которую вы передаете grViz, была заменена фактической переменной text_var, содержащей вашу строку. Попробуйте вместо этого:

grViz(gsub("text_var", text_var, "digraph flowchart {
      # Node definitions
      node [fontname = Helvetica, shape = box]        
      tab1 [label = <<b> Node 1 </b> <br ALIGN = 'LEFT' /> &#8226; text_var  <br ALIGN = 'LEFT' /> 
                    >]
      tab2 [label = 'Node 2']

      # Edge definitions
      tab1 -> tab2 


      }"))
    ```
...