RShiny: как я могу суммировать / подмножество / фильтровать данные, используя checkboxGroupInput? - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь использовать флажок ввода для подмножества, фильтрации и суммирования данных. Я смоделировал проблему с данными радужной оболочки.

Я пытаюсь разрешить пользователю суммировать данные радужной оболочки глаза по ширине / длине чашелистика, ширине / длине лепестка или обоим. По отдельности каждый флажок работает, но использование нескольких вариантов ввода НЕ работает. Выбор «Sepal» и «Petal» возвращает только данные Sepal.

UI:

ui <- fluidPage(
    fluidRow(
        box(
            title = "Choose data", width = 3, solidHeader = TRUE,
            status = "primary", collapsible = TRUE,
            checkboxGroupInput("iris_select", "Select measurements:",
                        choices = list("Sepal", "Petal"),
                        selected = c("Sepal")),
            verbatimTextOutput("whatdidiselect")),

        box(
            title = "See your data output", width = 9, solidHeader = TRUE,
            status = "success", collapsible = TRUE,
            DT::dataTableOutput("iris_output")
        )))

И сервер:

server <- function(input, output) {

     output$whatdidiselect <- renderText(input$iris_select)

     iris_summary <- reactive({
        if(all(c("Sepal") %in% input$iris_select)){
            iris %>% 
                group_by(., Species) %>%
                summarise(Mean_Sepal_Length = mean(Sepal.Length),
                          Mean_Sepal_Width = mean(Sepal.Width))}

            if(all(c("Petal") %in% input$iris_select)){
                iris %>% 
                    group_by(., Species) %>%
                    summarise(Mean_Petal_Length = mean(Petal.Length),
                              Mean_Petal_Width = mean(Petal.Width))}

                if(all(c("Sepal", "Petal") %in% input$iris_select)){
                    iris %>% 
                        group_by(., Species) %>%
                        summarise(Mean_Sepal_Length = mean(Sepal.Length),
                                  Mean_Sepal_Width = mean(Sepal.Width),
                                  Mean_Petal_Length = mean(Petal.Length),
                                  Mean_Petal_Width = mean(Petal.Width))} 
    })

    output$iris_output <- DT::renderDataTable({
        iris_summary()})
}

Кажется, это должно быть просто , Может кто-нибудь указать, где я иду не так?

1 Ответ

1 голос
/ 27 апреля 2020

Вам нужно повернуть логику c в all (хотя бы для первых двух проверок), например:

server <- function(input, output) {

  output$whatdidiselect <- renderText(input$iris_select)

  iris_summary <- reactive({
    if(all(input$iris_select == 'Sepal')){
      iris %>% 
        group_by(., Species) %>%
        summarise(Mean_Sepal_Length = mean(Sepal.Length),
                  Mean_Sepal_Width = mean(Sepal.Width))}

    else if(all(input$iris_select == 'Petal')){
      iris %>% 
        group_by(., Species) %>%
        summarise(Mean_Petal_Length = mean(Petal.Length),
                  Mean_Petal_Width = mean(Petal.Width))}

    else if(all(input$iris_select %in% c('Sepal', 'Petal'))){
      iris %>% 
        group_by(., Species) %>%
        summarise(Mean_Sepal_Length = mean(Sepal.Length),
                  Mean_Sepal_Width = mean(Sepal.Width),
                  Mean_Petal_Length = mean(Petal.Length),
                  Mean_Petal_Width = mean(Petal.Width))} 
  })

  output$iris_output <- DT::renderDataTable({
    iris_summary()})
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...