gpt4 book ai didi

r - Shiny 的 R 要么 要么 有两个输入的过滤器

转载 作者:行者123 更新时间:2023-12-04 12:16:53 25 4
gpt4 key购买 nike

我创建了一个 Shiny 的应用程序并想实现一个“非此即彼”的过滤器。

假设所有内容都已预选,因此表格会完整显示。如果我选择一个过滤器,那么另一个过滤器将被取消/忽略/无效/...

例如,我选择 'gears' = 3 并且 'carb' 为空。然后我添加 'gears' = 4。之后我选择 'carb' = 1 并且 'gear' 过滤器为空。

也许有人可以帮助我。我正在思考这个问题。我想我需要使用 reactiveeventReactive 或其他类型的 reactive 表达式。但也许这里有人有想法。

library(shiny)
library(shinyWidgets)

data(mtcars)
allcarbs <- sort(unique(mtcars$carb))
allgears <- sort(unique(mtcars$gear))

ui <- fluidPage(

pickerInput(inputId = "carbinput",
label = h4("carb"),
choices = allcarbs,
selected = allcarbs,
multiple = TRUE, options = list('actions-box' = TRUE)),

h4("or"),

pickerInput(inputId = "gearinput",
label = h4("gears"),
choices = allgears,
selected = allgears,
multiple = TRUE, options = list('actions-box' = TRUE)),

tableOutput("mtcarstab")
)

server <- function(input, output, session) {

output$mtcarstab <- renderTable({
subset(mtcars,
gear %in% as.numeric(input$gearinput) |
carb %in% as.numeric(input$carbinput))
})
}

shinyApp(ui, server)

最佳答案

一个简单的解决方案:

在声明服务器或 UI 之前,创建响应值

vals=reactiveValues(carb=FALSE,gear=FALSE)

然后您可以使用 observeEvent 在您的服务器上更改它们:

observeEvent(input$gearinput,{
vals$gear=TRUE
vals$carb=FALSE
})

observeEvent(input$carbinput,{
vals$gear=FALSE
vals$carb=TRUE
})

mytable=eventReactive(c(vals$gear,vals$carb,input$carb,input$gear),{
if(vals$carb){return(subset(mtcars,
carb %in% as.numeric(input$carbinput)))}
else{return(subset(mtcars,
gear %in% as.numeric(input$gearinput)))}
})

output$mtcarstab <- renderTable({
mytable()
})

编辑:我将评论编辑到答案中,以使其 100% 正确。

关于r - Shiny 的 R 要么 要么 有两个输入的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49048019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com