闪亮的R或两个输入过滤器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闪亮的R或两个输入过滤器相关的知识,希望对你有一定的参考价值。

我创建了一个闪亮的应用程序,并希望实现“任一或”过滤器。

假设所有内容都已预先选中,因此表格会完全显示。如果我选择一个过滤器,则其他过滤器被解除/忽略/无效/ ...

例如,我选择'齿轮'= 3并且'碳水化合物'被取消。比我添加'齿轮'= 4.之后我选择'carb'= 1并且'齿轮'过滤器被取消。

也许有人可以帮助我。我正在解决这个问题。我想我需要使用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或两个输入过滤器的主要内容,如果未能解决你的问题,请参考以下文章

错误:所有观察都在同一组中,同时从闪亮的ui列表中动态过滤R模型

r-闪亮的服务器选择输入

r - 空 textInput() 导致传单闪亮应用程序出错

r - 空文本输入()导致传单闪亮应用程序中的错误

错误:所有观察都在同一组中,同时从闪亮的 ui 列表中动态过滤 R 模型

通过多列中的值有效地在R中闪烁过滤数据帧