У меня блестящее приложение, как показано ниже, использующее набор данных diamonds
в качестве примера. Я использую два selectInput в качестве фильтра данных. Первый выберите переменную. Второй показывает значения в зависимости от переменной, выбранной в первом selectInput. После выбора нажмите кнопку actionButton, чтобы активировать фильтр. Без какой-либо переменной и выбранного значения, я хочу, чтобы он вывел весь набор данных.
Я обнаружил, что после того, как я очистил два selectInput и затем нажал кнопку action, я получил ошибку: argument 1 is empty
. Я не понимаю, почему это происходит. Потратил часы, но не смог найти решение. Кто-нибудь знает, как я могу это исправить? Большое спасибо!
library(shiny)
library(shinydashboard)
library(dplyr)
library(rlang)
data(diamonds)
df = diamonds[1:1000,]
subset_data = function(data,
var=NULL,
value=NULL){
if (!is.null(var)) {
if(!is.null(value)) {
data = data %>% filter(!!sym(var) == value)
}
}
return(data)
}
ui <- dashboardPage(
dashboardHeader(title = "example"),
dashboardSidebar(),
dashboardBody(
fluidRow(
selectizeInput(inputId = 'var',
label='Select variable',
choices = c('cut', 'color'),
multiple=FALSE,
options = list(
maxItems = 1,
placeholder = '',
onInitialize = I("function() { this.setValue(''); }"))),
uiOutput("valueUI"),
actionButton('go', 'apply filter'),
tableOutput('table')
)
)
)
server <- function(input, output, session) {
output$valueUI = renderUI({
if (input$var == '') {
vals = ''
}
if (input$var == 'cut') {
vals = c('Premium', 'Good', 'Very Good', 'Fair')
}
if (input$var == 'color'){
vals = c('E', 'J', 'I', 'H')
}
selectizeInput(inputId = 'value',
label='Select values',
choices = c('',vals),
multiple=FALSE,
options = list(
maxItems = 1,
placeholder = '',
onInitialize = I("function() { this.setValue(''); }")))
})
dat = reactive({
input$go
isolate( subset_data(data=df, var=input$var, value=input$value) )
})
output$table <- renderTable({
dat()
})
}
shinyApp(ui, server)