【发布时间】:2021-02-05 22:54:22
【问题描述】:
此反应函数的目标是在 RShiny 应用程序的初始测试期间显示原始 starwars 数据集(可从 dplyr 库中获得)。
在当前场景下,用户必须先点击Run Query才能弹出数据,然后可以进入过滤器,进行相应的过滤,再次点击Run Query才能显示结果。
理想的目标是让最终用户首先弹出数据,然后用户可以选择他们想要的过滤器,然后点击Run Query 以显示相应的结果。
任何帮助将不胜感激!谢谢!
library(DT)
library(shiny)
library(shinydashboard)
library(dplyr)
library(dbplyr)
library(tidyverse)
library(DBI)
ui <- function(request) {
dashboardPage(
dashboardHeader(title = "SW Pivot"),
dashboardSidebar(
actionButton("runit", "RUN QUERY"),
hr(),
h4(HTML(" "), "Filter Data Set"),
uiOutput("hairColorFilter"),
uiOutput("skinColorFilter")
),
dashboardBody(dataTableOutput("data"))
)
}
data <- starwars
server<-shinyServer(function(input, output, session) {
# Identify Filter Choices -----------------------------------------------
hairColorChoices <- sort(unique(data$hair_color))
skinColorChoices <- sort(unique(data$skin_color))
# Define User Inputs ----------------------------------------------------
output$hairColorFilter <- renderUI({
sidebarMenu(
menuItem(
text = "Hair Color",
icon = icon("briefcase"),
checkboxGroupInput(
inputId = "hairColorChoices",
label = NULL,
choices = hairColorChoices,
selected = hairColorChoices
)
)
)
})
output$skinColorFilter <- renderUI({
sidebarMenu(
menuItem(
text = "Skin Color",
icon = icon("thermometer-half"),
checkboxGroupInput(
inputId = "skinColorChoices",
label = NULL,
choices = skinColorChoices,
selected = skinColorChoices
)
)
)
})
# Table Data --------------------------------------------------------------
filterData <- reactive({
input$runit
isolate({
filterData <- data %>%
filter(
hair_color %in% input$hairColorChoices,
skin_color %in% input$skinColorChoices
)
})
})
output$data <- renderDataTable({
filterData()
})
})
shinyApp(ui, server)
【问题讨论】:
标签: r function user-interface shiny