RShiny: Display Multiple Inputs and Text

2019-05-10 07:28发布

问题:

I would like to display multiple output objects inside a tab in my RShiny app. In the tutorial the tabPanel(...) command only takes argument:

tabPanel("Plot", plotOutput("plot"))

However in the reference docs here, it reads "UI elements to include within the tab" leading me to believe that multiple are possible, but I cannot find examples. I have attempted passing objects to it as a vector c(...) and a list list(...).

Here are the server.R and ui.R I have been testing with (from the Shiny Tutorial).

ui.R


    library(shiny)

    # Define UI for random distribution application 
    shinyUI(fluidPage(

      # Application title
      titlePanel("Tabsets"),

      # Sidebar with controls to select the random distribution type
      # and number of observations to generate. Note the use of the
      # br() element to introduce extra vertical spacing
      sidebarLayout(
        sidebarPanel(
          radioButtons("dist", "Distribution type:",
                       c("Normal" = "norm",
                         "Uniform" = "unif",
                         "Log-normal" = "lnorm",
                         "Exponential" = "exp")),
          br(),

          sliderInput("n", 
                      "Number of observations:", 
                      value = 500,
                      min = 1, 
                      max = 1000)
        ),

        # Show a tabset that includes a plot, summary, and table view
        # of the generated distribution
        mainPanel(
          tabsetPanel(type = "tabs", 
                      tabPanel("Plot", plotOutput("plot")), 
                      tabPanel("Summary", verbatimTextOutput("summary")), 
                      tabPanel("Table", tableOutput("table"))
          )
        )
      )
    ))

server.R


    library(shiny)

    # Define server logic for random distribution application
    shinyServer(function(input, output) {

      # Reactive expression to generate the requested distribution.
      # This is called whenever the inputs change. The output
      # functions defined below then all use the value computed from
      # this expression
      data <- reactive({
        dist <- switch(input$dist,
                       norm = rnorm,
                       unif = runif,
                       lnorm = rlnorm,
                       exp = rexp,
                       rnorm)

        dist(input$n)
      })

      # Generate a plot of the data. Also uses the inputs to build
      # the plot label. Note that the dependencies on both the inputs
      # and the data reactive expression are both tracked, and
      # all expressions are called in the sequence implied by the
      # dependency graph
      output$plot <- renderPlot({
        dist <- input$dist
        n <- input$n

        hist(data(), 
             main=paste('r', dist, '(', n, ')', sep=''))
      })

      # Generate a summary of the data
      output$summary <- renderPrint({
        summary(data())
      })

      # Generate an HTML table view of the data
      output$table <- renderTable({
        data.frame(x=data())
      })

    })

回答1:

The following worked for me:

mainPanel(
    tabsetPanel(
      tabPanel("Some Title",
               h5(textOutput("some text output")),
               htmlOutput("someHTMLElement")
      ),
      tabPanel("Other Title",
               h5(textOutput("some other text output")),
               htmlOutput("otherHTMLElement")
      ),
      tabPanel("Yet Another Title",
               h5(textOutput("yet another text output")),
               htmlOutput("yetAnotherHTMLElement")
      )
    )

Function tabPanel specification is

 tabPanel(title, ..., value = NULL)

which means that it accepts variable number of parameters for "UI elements to include within the tab"



标签: r shiny rstudio