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?
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
.
Selon Joe Cheng:
Uhhh Je ne recommande pas d'utiliser
renderUI
ethtmlOutput
[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)
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], ".")
})