Sortie de plusieurs lignes de texte avec renderText () dans R shiny

Je veux sortir plusieurs lignes de texte en utilisant une commande renderText(). Toutefois, cela ne semble pas possible. Par exemple, à partir du tutoriel brillant nous avons du code tronqué dans server.R:

shinyServer(
  function(input, output) {
    output$text1 <- renderText({paste("You have selected", input$var)
    output$text2 <- renderText({paste("You have chosen a range that goes from",
      input$range[1], "to", input$range[2])})
  }
)

Et code dans ui.R:

shinyUI(pageWithSidebar(

  mainPanel(textOutput("text1"),
            textOutput("text2"))
))

Qui imprime essentiellement deux lignes:

You have selected example
You have chosen a range that goes from example range.

Est-il possible de combiner les deux lignes output$text1 et output$text2 dans un seul bloc de code? Mes efforts jusqu'à présent ont échoué, par exemple

output$text = renderText({paste("You have selected ", input$var, "n", "You have chosen a range that goes from", input$range[1], "to", input$range[2])})

Quelqu'un a des idées?

45
demandé sur Alex 2014-04-23 05:58:42

3 réponses

, Vous pouvez utiliser renderUI et htmlOutput au lieu de renderText et textOutput.

require(shiny)
runApp(list(ui = pageWithSidebar(
  headerPanel("censusVis"),
  sidebarPanel(
    helpText("Create demographic maps with 
      information from the 2010 US Census."),
    selectInput("var", 
                label = "Choose a variable to display",
                choices = c("Percent White", "Percent Black",
                            "Percent Hispanic", "Percent Asian"),
                selected = "Percent White"),
    sliderInput("range", 
                label = "Range of interest:",
                min = 0, max = 100, value = c(0, 100))
  ),
  mainPanel(textOutput("text1"),
            textOutput("text2"),
            htmlOutput("text")
  )
),
server = function(input, output) {
  output$text1 <- renderText({paste("You have selected", input$var)})
  output$text2 <- renderText({paste("You have chosen a range that goes from",
                                    input$range[1], "to", input$range[2])})
  output$text <- renderUI({
    str1 <- paste("You have selected", input$var)
    str2 <- paste("You have chosen a range that goes from",
                  input$range[1], "to", input$range[2])
    HTML(paste(str1, str2, sep = '<br/>'))

  })
}
)
)

Remarque vous devez utiliser <br/> comme un saut de ligne. De plus, le texte que vous souhaitez afficher doit être HTML échappé, utilisez donc la fonction HTML.

71
répondu jdharrison 2014-04-27 10:33:18

Selon Joe Cheng:

Uhhh Je ne recommande pas d'utiliser renderUI et htmlOutput [de la manière expliquée dans l'autre réponse]. Vous prenez du texte qui est fondamentalement du texte, et vous forcez au HTML sans vous échapper (ce qui signifie que si le texte inclut une chaîne contenant des caractères HTML spéciaux, il pourrait être mal analysé).

Que diriez-vous de ceci à la place:

textOutput("foo"),
tags$style(type="text/css", "#foo {white-space: pre-wrap;}")

(remplacez le foo dans # foo par L'ID de votre textOutput)

4
répondu theforestecologist 2017-04-13 21:03:14

Si vous voulez dire que vous ne vous souciez pas du saut de ligne:

output$text = renderText({
  paste("You have selected ", input$var, ". You have chosen a range that goes 
  from", input$range[1], "to", input$range[2], ".")
})
-1
répondu Priscilla 2018-03-12 16:51:56