我想创建一个闪亮的仪表板,其中侧边栏中有一个
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)
如果您希望在更改选择时隐藏表格,可以将其隐藏在观察者中。试试这个
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)