1. ホーム
  2. r

RでrenderText()を使って複数行のテキストを出力する shiny

2023-12-07 23:57:22

質問内容

複数行のテキストを1つの renderText() コマンドで出力したい。しかし、これは不可能のようです。例えば shiny チュートリアル でコードを切り捨てています。 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])})
  }
)

のコードと ui.R :

shinyUI(pageWithSidebar(

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

で、実質的に2行を表示します。

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

2つの行を組み合わせることは可能でしょうか? output$text1output$text2 を1つのコードブロックにまとめることはできますか?これまでの私の努力は、例えば、失敗しています。

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

どなたかお分かりになる方いらっしゃいますか?

どのように解決するのですか?

この場合 renderUIhtmlOutput の代わりに renderText であり 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/>'))

  })
}
)
)

を使用する必要があることに注意してください。 <br/> を改行として使う必要があることに注意してください。また、表示するテキストはHTMLエスケープする必要があるので HTML 関数を使います。