Je souhaite générer plusieurs lignes de texte à l'aide d'une seule commande renderText()
. Cependant, cela ne semble pas possible. Par exemple, à partir du tutoriel brillant , nous avons tronqué du code 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 bloc de code? Mes efforts ont jusqu'à présent é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?
Vous pouvez utiliser renderUI
et htmlOutput
à la place 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/>'))
})
}
)
)
Notez que vous devez utiliser <br/>
comme un saut de ligne. De plus, le texte que vous souhaitez afficher doit être échappé en HTML, utilisez donc la fonction HTML
.
Selon Joe Cheng :
Euhhh, je ne recommande pas d'utiliser
renderUI
ethtmlOutput
[de la manière qui est expliquée dans l'autre réponse]. Vous prenez du texte qui est fondamentalement du texte et forcez le code HTML sans vous échapper (en d'autres termes, si le texte contient une chaîne contenant des caractères HTML spéciaux, il peut être analysé de manière incorrecte).Que diriez-vous de cela à 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)