javascript - 在 r 中限制输入 selectizeInput 的组合闪亮
问题描述
我正在构建一个小应用程序来总结一些数据。我的结果表包含多个类别的值,这些类别的总和为给定总数。现在我希望用户能够输入不同的类别并获得这些类别的统计数据的总和,或者向他们显示所有类别的总数(因此选择所有类别与选择总数相同)。为了使应用程序看起来更干净,我想简单地使用一个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 输入互斥 R Shiny不完全相同。
理想情况下,此解决方案将在 .js 中的自定义 javascript 中selectizeInput()
,但也可以在服务器端。
解决方案
一种方法是在选中时忽略其他选择Total
。尝试这个
df <- data.frame(x = c("A", "B", "C"),
sum_res = c(5, 3, 2))
library(shiny)
ui <- fluidPage(title = 'Selectize examples',
sidebarLayout(
sidebarPanel(
selectizeInput(
'e2',
'2. Multi-select',
multiple = TRUE,
selected = "Total",
choices = c("Total",unique(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({
if ("Total" %in% input$e2 | length(input$e2)==3) df1 <- df
else df1 <- df %>% filter(x %in% input$e2)
df1 %>% summarise(sum = sum(sum_res))
})
}
shinyApp(ui, server)
推荐阅读
- python - 如何将“networkx.digraph”视为无向
- regex - 在 VScode 中查找和删除组标签
- python - 检查每个字母
- uwp - 为什么 Header 比 Title 大,什么时候使用?
- vulkan - Vulkan 队列提交同步 - vkWaitForFences vs vkQueueWaitIdle
- javascript - 无法在基于反应的应用程序上单击带有 selenium webdriver 的按钮
- python - session.add() 和会话方法不存在
- ios - SwiftUI:我想每天显示一个随机元素,即使在重新启动应用程序之后也是如此
- typescript - 类型“{}”上不存在属性“onMessage”。& “{}”类型的参数不能分配给“null”类型的参数
- mysql - 如果 Id,如何获取名称