使用actionbutton显示最初隐藏的box()和表格,但随后仅将其用于表格的子集化

问题描述 投票:0回答:1

我想创建一个闪亮的仪表板,其中侧边栏中有一个

selectinput()
,其中包含
iris
数据集的所有列名称,在
box()
内的主体中,我们有一个
iris
的数据表,它的子集为
selectInput()
,以及其下方的
actiobutton()
,开箱即用。

应用程序启动时,既不显示框也不显示表格。当我单击

actionbutton()
时,会显示带有子集表的框。然后,如果我更改
selectInput()
选择,则不会发生任何事情,但如果我单击
actionbutton()
,则会发生子集。盒子在整个期间都保留在那里,再也没有隐藏过。

library(shiny)
library(shinydashboard)
library(DT)

# Define UI
ui <- dashboardPage(
  dashboardHeader(title = "Subset Iris Dataset"),
  dashboardSidebar(
    selectInput("columns_selected", "Select Columns", choices = colnames(iris), multiple = TRUE)
  ),
  dashboardBody(
    
        fluidRow(
          box(
            title = "Subsetted Iris Data",
            width = 12,
            DTOutput("subset_table"),
          ),
          actionButton("subset_button", "Subset Data")
        )
  )
)

# Define server logic
server <- function(input, output) {
  # Load the iris dataset
  data <- iris
  
  observeEvent(input$subset_button, {
    columns_selected <- input$columns_selected
    if (!is.null(columns_selected)) {
      data_subset <- data[, columns_selected, drop = FALSE]
      output$subset_table <- renderDT({
        datatable(data_subset)
      })
      show("subset_table")
    }
  })
  
  observe({
    hide("subset_table")
  })
}

# Run the application 
shinyApp(ui = ui, server = server)
r shiny shinydashboard
1个回答
0
投票

如果您希望在更改选择时隐藏表格,可以将其隐藏在观察者中。试试这个

library(shiny)
library(shinydashboard)
library(DT)
library(shinyjs)

# Define UI
ui <- dashboardPage(
  dashboardHeader(title = "Subset Iris Dataset"),
  dashboardSidebar(
    selectInput("columns_selected", "Select Columns", choices = colnames(iris), multiple = TRUE)
  ),
  dashboardBody(
    useShinyjs(),
    fluidRow(
      box(
        title = "Subsetted Iris Data",
        width = 12,
        DTOutput("subset_table"),
      ),
      actionButton("subset_button", "Subset Data")
    )
  )
)

# Define server logic
server <- function(input, output) {
  # Load the iris dataset
  data <- iris
  
  data_subset <- eventReactive(input$subset_button, { 
    columns_selected <- input$columns_selected
    if (is.null(columns_selected)) { df <- NULL
    }else {
      df <- data[, columns_selected, drop = FALSE]
    }
    df
  })
  
  observeEvent(input$subset_button, {
    if (!is.null(input$columns_selected)) {
      show("subset_table")
    }
  })
  
  output$subset_table <- renderDT({
    datatable(data_subset())
  })
  
  observeEvent(input$columns_selected, {
    shinyjs::hide("subset_table")
  })
}

# Run the application 
shinyApp(ui = ui, server = server)
© www.soinside.com 2019 - 2024. All rights reserved.