【发布时间】:2021-09-07 22:07:28
【问题描述】:
我正在构建一个小应用程序来汇总一些数据。我的结果表包含多个类别的值,这些类别的总和为给定总数。现在我希望用户能够输入不同的类别并获得这些类别的统计数据的总和或向他们显示所有类别的总数(因此选择所有类别与选择总数相同)。为了让应用看起来更干净,我想简单地使用一个selectizeInput。但是,这意味着如果用户选择类别total,他们将无法选择其他3 个类别中的任何一个,并且如果选择了3 个类别中的任何一个,则应取消选择total。否则,如果用户选择包括总和在内的所有输入,则总和为 2*Total(在我的示例中为 20 而不是 10)。
小例子(基于https://shiny.rstudio.com/articles/selectize.html)
df <- data.frame(x = c("Total", "A", "B", "C"),
sum_res = c(10, 5, 3, 2))
library(shiny)
ui <- fluidPage(title = 'Selectize examples',
sidebarLayout(
sidebarPanel(
selectizeInput(
'e2',
'2. Multi-select',
multiple = TRUE,
selected = "Total",
choices = df$x
)
),
mainPanel(
helpText('Output of the examples in the left:'),
verbatimTextOutput('ex_out'),
verbatimTextOutput('sum')
)
))
server <- function(input, output) {
output$ex_out <- renderPrint({
str(list(input$e2))
})
output$sum <- renderPrint({
df %>%
filter(x %in% input$e2) %>%
summarise(sum = sum(sum_res))
})
}
shinyApp(ui, server)
这有点相关,但与Selectizeinput inputs be mutually exclusive R Shiny不完全相同。
理想情况下,此解决方案将在 selectizeInput() 内的自定义 javascript 中,但也可以在服务器端。
【问题讨论】:
标签: javascript r shiny shinydashboard