shiny - 侧边栏中的过滤选项
问题描述
在下面的示例代码(ui.R)中,我们可以在侧边栏中添加过滤选项。例如,如果您单击边栏中的仪表板,则过滤选项应低于该选项
用户界面
library(shinydashboard)
ui = sidebar <- dashboardSidebar(
sidebarMenu(
menuItem("Dashboard", tabName = "dashboard", icon = icon("dashboard")),
menuItem("Widgets", icon = icon("th"), tabName = "widgets",
badgeLabel = "new", badgeColor = "green")
)
)
body <- dashboardBody(
tabItems(
tabItem(tabName = "dashboard",
h2("Dashboard tab content")
),
tabItem(tabName = "widgets",
h2("Widgets tab content")
)
)
)
# Put them together into a dashboardPage
dashboardPage(
dashboardHeader(title = "Simple tabs"),
sidebar,
body
)
解决方案
你可以做的事情有很多。请参阅下面的两个示例脚本,以了解有关在 Shiny 世界中使用过滤器的可能性的一些想法。
使用组合框过滤:
library(shiny)
library(dplyr)
data(tips, package = "reshape2")
filter_vars <- c("sex", "smoker", "day", "time")
ui <- fluidPage(
lapply(filter_vars, function(var) {
selectInput(var, var, unique(tips[[var]]), multiple = TRUE)
}),
tableOutput("table")
)
server <- function(input, output, session) {
my_filter <- function(data, var) {
if (length(input[[var]]) == 0) return(data)
data %>% subset(data[[var]] %in% input[[var]])
}
subsettedData <- reactive({
tips %>% my_filter("sex") %>% my_filter("smoker") %>%
my_filter("day") %>% my_filter("time")
})
observeEvent(subsettedData(), {
lapply(filter_vars, function(var) {
selections <- unique(subsettedData()[[var]])
if (length(input[[var]]) == 0)
updateSelectInput(session, var, choices = selections)
})
})
output$table <- renderTable({ subsettedData() })
}
shinyApp(ui, server)
键入时过滤:
library(shinydashboard)
library(DT)
df <- mtcars
header <- dashboardHeader(
title = "Test"
)
sidebar <- dashboardSidebar(
)
body <- dashboardBody(
box(title = "Test", width = 7, status = "warning", DT::dataTableOutput("df"))
)
# UI
ui <- dashboardPage(header, sidebar, body)
# Server
server <- function(input, output, session) {
output$df = DT::renderDataTable(df, rownames = FALSE,
options = list(
autoWidth = TRUE,
columnDefs = list(list(width = '10px', targets = c(1,3)))))
}
# Shiny dashboard
shiny::shinyApp(ui, server)
推荐阅读
- php - 错误:非对象的属性
- angular - 从 url 检索正确日期的问题
- java - HttpURLConnection 错误:HTTP 方法 PATCH 无效
- python - 类型错误:escape_string() 参数 1(不可能
) 在 Python 中 - informatica - 如何将工作流变量添加到 100 个不同的工作流?
- hbase - 如何在 Hbase 中读取字符串数组列
- c# - 投射表达式
- html - 为什么
嵌套在块元素的线索中?
- android - 试图通过 EventBus 影响 RecyclerView 项目
- php - 无法在 ubuntu18.04 LTS 中安装 php7.0