在 R Shiny 中,如何通过 selectInput 将旧选项卡替换为新选项卡

In Rshiny, How to replace old tabs with new one by selectInpout

这是一个现有的例子

library(shiny)
runExample("06_tabsets")

您会看到您可以在单选按钮中选择分发类型,并且有三个选项卡 "Plot"、"Summary" 和 "Table"。

我的问题是如何在 sliderInput(观察数)下添加一个具有两个值的 selectInput。默认一个是"NULL",第二个是“1”。一旦用户 select “1”,之前的三个标签就会消失。相反,一个新标签会显示它的内容。

这是修改后的“06_tabsets”。添加 select 输入并根据 select 离子生成 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"))
                                    )
                            })       
                    }
            })


    })