R – Outputting multiple lines of text with renderText() in R shiny

r, shiny

I want to output multiple lines of text using one renderText() command. However, this does not seem possible. For example, from the shiny tutorial we have truncated code in 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])})  })

and code in ui.R:

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

which essentially prints two lines:

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

Is it possible to combine the two lines output$text1 and output$text2 into one block of code? My efforts so far have failed, e.g.

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])})

Anyone have any ideas?

Best Solution

You can use renderUI and htmlOutput instead of renderText and 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/>'))  })}))

Note you need to use <br/> as a line break. Also the text you wish to display needs to be HTML escaped so use the HTML function.