R блестящий: есть ли специальный шрифт для написания кода R в verbatimTextOuput? - PullRequest
0 голосов
/ 02 июля 2019

Я пишу shinyapp, который отображает некоторый R-код в среде verbatimTextOutput, и я хотел бы знать, есть ли способ отобразить этот код так, как Rstudio отображает его (например, зеленым шрифтом после хэштега).

Я знаю, что можно изменить шрифт с помощью css (даже если я не знаю, как это сделать), но есть ли «пакет», который автоматически отображает код, как это делает Rstudio?

Вот воспроизводимый пример:

library(shiny)

ui <- fluidPage(
  titlePanel(""),
  sidebarLayout(
    sidebarPanel(),
    mainPanel(verbatimTextOutput("base", placeholder = FALSE))
    )
  )

server <- function(input, output) {

  output$base <- renderPrint({
    cat("# I would like this to be written in green (or other color)",
        "library(this could be in blue)",
        sep = "\n")
  })

}

shinyApp(ui = ui, server = server)

Ответы [ 3 ]

1 голос
/ 02 июля 2019

Вы не можете точно делать то, что хотели, но есть два решения, которые, я надеюсь, вам понравится: -).

Вы можете использовать теги HTML (используйте paste0 для назначенияцвета динамически) или установите стиль с помощью CSS для вашего verbatimOutput.Два цвета, к сожалению, невозможны, так как VerbatimOutput не обрабатывает встроенный CSS.

library(shiny)

ui <- fluidPage(
    tags$head(tags$style(HTML("
                            #base2 {
                              color: blue;
                            }
                            "))),
    titlePanel(""),
    sidebarLayout(
        sidebarPanel(),
        mainPanel(selectizeInput("color", "Colors", choices = c("green", "blue", "red"), selected = "green", multiple = FALSE),
                  uiOutput("base", placeholder = FALSE),
                  tags$br(),
                  verbatimTextOutput("base2"))
    )
)

server <- function(input, output) {

    output$base <- renderUI({
        HTML(paste0('<span style="color:', input$color, '">I would like this to be written in green</span> (or other color)<br>
          <span style="color:blue">library(this could be in blue)</span>'))
    })

    output$base2 <- renderPrint({
        cat("# I would like this to be written in green (or other color)",
            "library(this could be in blue)",
            sep = "\n")
    })

}

shinyApp(ui = ui, server = server)
1 голос
/ 02 июля 2019

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

library(shiny)

ui <- fluidPage(
  titlePanel(""),
  sidebarLayout(
    sidebarPanel(),
    mainPanel(uiOutput("base", placeholder = FALSE))
  )
)

server <- function(input, output) {

  output$base <- renderUI({
    HTML("<form class = 'well'>
            <p style = 'color: green;'>I would like this to be written in green (or other color)</p>
            <p style = 'color: blue;'>library(this could be in blue)</p>
          </form>")
  })

}

shinyApp(ui = ui, server = server)
0 голосов
/ 09 июля 2019

После разработки моего приложения я могу сказать, что ответ Стефана Лорана - тот, который больше всего соответствует тому, что я хотел сделать (т.е. отобразить реактивный код R в блестящем приложении).

Пакет блестящий Ace действительно полезен, некоторые примеры можно найти здесь (https://trestletech.github.io/shinyAce/).

В любом случае, спасибо за ваши ответы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...