在Rshiny中,如何用selectInpout替换旧的选项卡

时间:2016-08-28 20:55:32

标签: shiny shiny-server shinydashboard

这是一个现有的例子

library(shiny)
runExample("06_tabsets")

你会看到你可以在radiobutton中选择分配类型,并且有三个选项卡" Plot"," Summary"和" Table"。

我的问题是如何在sliderInput(观察次数)下添加两个值的selectInput。默认值为" NULL",第二个是" 1"。用户选择" 1"后,前三个选项卡将消失。相反,新标签会显示其内容。

1 个答案:

答案 0 :(得分:1)

这是经修改的" 06_tabsets"。添加选择输入并根据选择生成UI。唯一的区别是不是使用NULL,而是两个选项。我可以让它运行NULL。如果这有帮助,请告诉我。

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),
                            selectInput("contentSelect", "Select content to dislay:", choices = c("1", "2"), selected = 1)
                    ),

                    # Show a tabset that includes a plot, summary, and table view
                    # of the generated distribution
                    mainPanel(
                            uiOutput("content")
                    )
            )
    ))

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())
            })
            output$textA <- renderText({
                    paste(input$contentSelect, " A")
            })

            observeEvent(input$contentSelect, {
                    if (input$contentSelect == "1") {
                            output$content <- renderUI({
                                    tabsetPanel(type = "tabs",
                                                tabPanel("Plot", plotOutput("plot")),
                                                tabPanel("Summary", verbatimTextOutput("summary")),
                                                tabPanel("Table", tableOutput("table"))
                                    )
                            })    
                    } else {
                            output$content <- renderUI({
                                    tabsetPanel(type = "tabs",
                                                tabPanel("A", textOutput("textA"))
                                    )
                            })       
                    }
            })


    })