Использование group_by с checkboxGroupInput в простом блестящем примере - PullRequest
1 голос
/ 26 апреля 2020

Я пытался использовать group_by с входными данными из checkboxGroupInput в простом блестящем приложении, показанном ниже.

Я ожидал, что, если я установлю 2 флажка (Цилиндры и шестерни), я получу тот же результат, что и при запуске:

   mtcars%>%
     group_by(cyl, gear) %>%
     count()

# A tibble: 8 x 3
# Groups:   cyl, gear [8]
    cyl  gear     n
  <dbl> <dbl> <int>
1     4     3     1
2     4     4     8
3     4     5     2
4     6     3     2
5     6     4     4
6     6     5     1
7     8     3    12
8     8     5     2

Вот простое блестящее приложение , Как бы я имитировал c вышеприведенный вывод, когда я проверял поля, созданные из приведенного ниже кода?

# UI
    ui <- fluidPage(


  checkboxGroupInput("variable", "Variables to show:",
                     c("Cylinders"    = "cyl",
                       "Transmission" = "am",
                       "Gears"        = "gear"
                       )
                     ),
  tableOutput("data")
)


# Server
server <- function(input, output) {

    output$data <- renderTable({

      mtcars %>%
        group_by(!!as.name(input$variable)) %>%
        count()

      },
    rownames = TRUE)

  } # Server function close


# Run the app
  shinyApp(ui, server)

Спасибо!

1 Ответ

0 голосов
/ 26 апреля 2020

В server мы можем изменить его на group_by_at, который принимает строковый ввод, и он будет вмещать более одной входной переменной группы, обернув vars

server <- function(input, output) {

    output$data <- renderTable({

     mtcars %>%
         group_by_at(vars(input$variable)) %>%
         count()

      },
     rownames = TRUE)

  }

Также в коде OP group_by потенциально может занимать более одной группы, поэтому мы можем преобразовать в символ с syms (больше элементов) и затем оценить (!!!). Если мы используем sym и !!, он будет работать только для одной переменной за раз

server <- function(input, output) {


  output$data <- renderTable({

    mtcars %>%
      group_by(!!! rlang::syms(input$variable)) %>%
      count()

  },
    rownames = TRUE)

}

-выход

enter image description here

...