r - 反应性地过滤/子集闪亮的数据框
问题描述
我想过滤一个数据框,以便我只选择分类变量包含闪亮应用程序用户选择的值的行。
这是一个可重现的示例:
## app.R ##
library(shiny)
library(shinydashboard)
library(tidyverse)
library(DT)
ui <- dashboardPage(
dashboardHeader(),
dashboardSidebar(
selectInput("cut", "Type of cut",
c("All",as.character(unique(diamonds$cut))), selected = "All",
multiple = TRUE)
),
dashboardBody(
DT::dataTableOutput("table")
)
)
server <- function(input, output) {
selectdata <- reactive({
diamonds %>%
filter(ifelse(any(input$cut == "All"), cut %in% unique(diamonds$cut),
cut %in% input$cut))
})
output$table <- DT::renderDT({
selectdata()
}, options = list(scrollX = TRUE))
}
shinyApp(ui, server)
该应用程序运行时没有错误,但是当用户删除“全部”并选择“Premuim”和“Good”时,什么也没有出现。但是,当用户选择“理想”时,所有行都会显示。我似乎看不出我做错了什么。
解决方案
我ifelse
用简单的if
条件代替。我想这更安全,因为管道filter
然后使用ifelse
可能会给您带来错误。考虑这个服务器代码:
library(shiny)
server <- function(input, output) {
selectdata <- reactive({
# Give back original data (no filter is needed)
if (any(input$cut == "All")) {
diamonds
} else {
# Subset data
# You can also use: base::subset(diamonds, cut %in% input$cut)
dplyr::filter(diamonds, cut %in% input$cut)
}
})
output$table <- DT::renderDT({
selectdata()
}, options = list(scrollX = TRUE))
}
推荐阅读
- ajax - jsGrid 调用 Controller .Net Core - 单元格不加载数据
- emacs - org-agenda-span 显示昨天、今天和明天的 3 天
- regex - 解析默认 Salt highstate 输出
- php - 在 64 位 Windows 上从 32 位 PHP 实例执行 64 位应用程序?
- wpf - WPF 模板化按钮 - 无点击事件
- python-2.7 - python中的双边移动平均线
- javascript - 酶模拟不改变文本区域
- node.js - 在 VS Code-debugger 中,如何在 launch.json 中为 nodejs 使用 envFile?
- javascript - Sequelize inside express route - 包括模型匹配搜索词的位置
- python-3.x - Python3-tk 已经安装,但是 python3.7 找不到模块 tkinter