r - Shiny App 未使用 dplyr 和 %in% 运算符进行过滤
问题描述
我正在使用菱形数据集制作一个应用程序,除非选择输入,否则我想显示完整的表格。但是,如果我选择,比如说,自己剪切,什么都不会出现。此外,如果我选择了很多东西,则不会出现额外的钻石。这是我的代码:
library(shiny)
library(DT)
library(tidyverse)
diamonds <- diamonds
#Shiny App
ui = fluidPage(
fluidRow(
column(2, selectizeInput(inputId = 'carat',
label = 'Select carat',
choices = unique(diamonds$carat),
selected = NULL,
multiple=TRUE)),
column(2, selectizeInput(inputId = 'cut',
label = 'Select cut',
choices = unique(diamonds$cut),
selected = NULL,
multiple=TRUE)),
column(2, selectizeInput(inputId = 'color',
label = 'Select color',
choices = unique(diamonds$color),
selected = NULL,
multiple=TRUE))
),
fluidRow (
column(12, dataTableOutput('data', height = '100px') )
)
)
server <- function(input, output, session) {
df_current <- reactive({
df <- diamonds%>%
filter(carat %in% ifelse(is.null(input$carat), carat, input$carat),
cut %in% ifelse(is.null(input$cut), color, input$cut),
color %in% ifelse(is.null(input$color), color, input$color))
df
})
output$data <- renderDataTable({
df_current()
})
}
shinyApp(ui = ui, server = server)
我不确定为什么反应函数 df_current 不能正常工作。
谢谢!
解决方案
我们可以根据要求将所有输入更改ifelse
为相同的长度,而返回单个 TRUE/FALSE。因此,最好使用. 此外,调用inside也不是正确的方法,因为它改变了参数的长度if/else
ifelse
is.null
if/else
unique
ifelse
server <- function(input, output, session) {
df_current <- reactive({
df <- diamonds%>%
filter(carat %in% if(is.null(input$carat)) carat else input$carat,
cut %in% if(is.null(input$cut)) cut else input$cut,
color %in% if(is.null(input$color)) color else input$color)
df
})
output$data <- renderDataTable({
df_current()
})
}
-输出
推荐阅读
- google-apis-explorer - 租户在执行 Google Explorer API 时被列入黑名单
- javascript - 为什么 0.1+0.2+0.3 不等于 0.3+0.2+0.1?
- angular - 防止 HttpClient 在 PUT、POST 和 PATCH 上读取 cookie
- sql - 获取特定 ID 的正确数据
- kubernetes - Kubernetes 删除 statefulset 会删除 pod,尽管 cascade=false
- php - 如何使用 Symfony QueryBuilder 仅检索实体 ID?
- image - 如何为多个图形制作 SVG 精灵图像?
- reactjs - React redux 表单字段数组单元测试失败
- java - 未找到模块:如何使用模块编译 JDK 10 Eclipse Maven 项目?
- javascript - json 的 Chrome 控制台输出有奇怪的行为