首页 > 解决方案 > R闪亮链接checkboxGroupInputs

问题描述

大家好,

我需要你的帮助:我有一个名为 data_test 的数据框,你可以用这些行重现它:

 PC<-c('001','002','003','004','005','006','007','008','009','010')
 A<-c('2','2','1','1','2','0','2','0','1','0')
 B<-c('0','2','0','0','1','0','0','0','1','0')
 C<-c('1','0','0','0','2','2','0','0','0','1')
 D<-c('1','0','1','1','0','2','1','1','2','2')
 E<-c('0','0','0','2','2','0','0','0','0','2')
 F<-c('0','1','1','1','0','0','2','0','0','0')
 data_test <- data.frame(PC, A, B, C, D, E, F)

我有三个名为“variable1”、“variable2”和“variable3”的 chekboxGroupInputs。这些 chekboxGroupInputs 中的每一个都有以下选择:“是”=“1”,“否”=“2”,“也许”=“0”。当我在第一个 chekboxGroupInput 中选中“否”选项时,出现次数显示为“4”:ok,如果我在第二个 chekboxGroupInput 中选中“也许”选项,出现次数为“2”:ok。但是,如果我取消选中“可能”框,则出现次数为“0”,而不是像以前那样返回“4”。当我检查时一切正常,但如果我取消选中,出现次数会下降到“0”,我不明白为什么。由于我的数据框中有几十个变量,我将拥有与变量一样多的 chekboxGroupInputs,所以如果您知道更好的方法来做到这一点,请告诉我。非常感谢您的帮助。这是我的程序的可重现示例:

 library(dplyr)
 library(shiny)

 ui <- fluidPage(
   fluidRow(
     column(3,
            checkboxGroupInput("variable1", "Occurences of column A :",
                               c("Yes (1)" = "1",
                                 "No (2)" = "2",
                                 "Perhaps (0)" = "0")),
            checkboxGroupInput("variable2", "Occurences of column B :",
                               c("Yes (1)" = "1",
                                 "No (2)" = "2",
                                 "Perhaps (0)" = "0")),
            checkboxGroupInput("variable3", "Occurences of column C :",
                               c("Yes (1)" = "1",
                                 "No (2)" = "2",
                                 "Perhaps (0)" = "0"))),

     column(3,
            tableOutput("data")),

     column(3,
            textOutput("result"))
     )
   )

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

   result <- 0

   observe({input$variable1

     output$result <- renderText({

       df1 <- filter(data_test, A %in% input$variable1)

       assign("df1", df1, envir = .GlobalEnv)

       result <- paste("Number of occurences = ", NROW(df1))

       })

     })

   observe({input$variable2

     if (is.null(input$variable2)){

       result <- paste("Number of occurences = ", NROW(df1))}

     else {

       output$result <- renderText({

         df2 <- filter(df1, B %in% input$variable2)

         assign("df2", df2, envir = .GlobalEnv)

         result <- paste("Number of occurences = ", NROW(df2))

         })

     }

     })

   observe({input$variable3

     if (is.null(input$variable3)){

       result <- paste("Number of occurences = ", NROW(df2)) }

     else {

       output$result <- renderText({

         df3 <- filter(df2, C %in% input$variable3)

         assign("df3", df3, envir = .GlobalEnv)

         result <- paste("Number of occurences = ", NROW(df3))

         })

     }

     })

   output$data <- renderTable({data_test})

 }

 shinyApp(ui, server)

标签: rshiny

解决方案


我创建了一个在下面工作的示例。我做df了一个reactive(这意味着它应该用 调用df()),并将所有过滤器放在一起。这is.null(input$variable1)是必要的,因为(我假设)如果没有选择任何内容,您需要所有行。

library(dplyr)
library(shiny)
PC<-c('001','002','003','004','005','006','007','008','009','010')
A<-c('2','2','1','1','2','0','2','0','1','0')
B<-c('0','2','0','0','1','0','0','0','1','0')
C<-c('1','0','0','0','2','2','0','0','0','1')
D<-c('1','0','1','1','0','2','1','1','2','2')
E<-c('0','0','0','2','2','0','0','0','0','2')
F<-c('0','1','1','1','0','0','2','0','0','0')
data_test <- data.frame(PC, A, B, C, D, E, F)

ui <- fluidPage(
  fluidRow(
    column(3,
           checkboxGroupInput("variable1", "Occurences of column A :",
                              c("Yes (1)" = "1",
                                "No (2)" = "2",
                                "Perhaps (0)" = "0")),
           checkboxGroupInput("variable2", "Occurences of column B :",
                              c("Yes (1)" = "1",
                                "No (2)" = "2",
                                "Perhaps (0)" = "0")),
           checkboxGroupInput("variable3", "Occurences of column C :",
                              c("Yes (1)" = "1",
                                "No (2)" = "2",
                                "Perhaps (0)" = "0"))),

    column(3,
           tableOutput("data")),

    column(3,
           textOutput("result"))
  )
)

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

  result <- 0

  df1 <- reactive({
    filter(data_test,
           (is.null(input$variable1) | A %in% input$variable1),
           (is.null(input$variable2) | B %in% input$variable2),
           (is.null(input$variable3) | C %in% input$variable3))
  })

  output$result <- renderText(paste("Number of occurences = ", nrow(df1())))


  output$data <- renderTable({df1()})

}

shinyApp(ui, server)

推荐阅读